锁定老帖子 主题:搞不懂php中的面向对象
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-22
楼上说的有道理,谢谢你的推荐!
|
|
返回顶楼 | |
发表时间:2009-06-22
diogin 写道 only_java 写道 dualface 写道 php 没有线程,运行模式也和 java 完全不同,还是多多补充基础知识吧 你开玩笑吧,php没多线程?pcntl_fork 兄台,你开玩笑吧,pcntl_fork 是线程? 老兄不要跟我玩文字游戏好不?我的意思是可以实现多线程,老实讲我没搞过,只是记得某本书上讲过,所以不多做评论 |
|
返回顶楼 | |
发表时间:2009-06-22
pcntl_fork 是你写的程序,,而不是php本身。。
|
|
返回顶楼 | |
发表时间:2009-06-22
only_java 写道
php5的面向对象虽然加强了很多,但还有很多东西比起java的面向对象弱了很多。有些东西甚至让人费解,就比如下面的代码,b extends a ,实例化b时a的构造函数却没执行?不知道实例化b时,php到底是则么执行的,高手来帮忙解惑!还有php的static成员竟然能在非static方法中使用,还好反过来会报错。好了,先贴代码
class a { function __construct() { echo "a"; } } class b extends a{ function __construct(){ echo "b"; } private $x=100; public static function getx(){ return $this->x; } } $x=new b(); echo $x->getx(); 结果是: b100 “a”竟然没有输出,真不知到php里类初始化的顺序 补充: 刚刚发现,原来是b的构造函数覆盖了a的构造函数,把b的构造函数去掉,就能输出a。真奇怪构造函数也能被覆盖?
哥们, 没用过C++吧~C++里子类的构造函数就会覆盖父类的,这只是语言的特性而已, PHP就是这么设计的, 不要拿java作为评判所有语言的标准。 还有,既然是静态方法了, 你还能写出$this来, 真佩服你, 从这就能看出来, 你java水平也不怎么样。。。 |
|
返回顶楼 | |
发表时间:2009-06-22
xieye 写道 luolonghao 写道 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Example</title> </head> <body> <?php echo "Hi, I'm a PHP script!"; ?> </body> </html> 实际项目的页面怎么可能这么简单呢。。 所以,模板是肯定用到的。 PHP本身就是模板语言啊~所以不需要再使用任何模板了~把值传到PHP页面,直接拿PHP来处理输出就可以了。 |
|
返回顶楼 | |
发表时间:2009-06-22
kingheaven 写道 xieye 写道 luolonghao 写道 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Example</title> </head> <body> <?php echo "Hi, I'm a PHP script!"; ?> </body> </html> 实际项目的页面怎么可能这么简单呢。。 所以,模板是肯定用到的。 PHP本身就是模板语言啊~所以不需要再使用任何模板了~把值传到PHP页面,直接拿PHP来处理输出就可以了。 我也是这样想的,看看Wordpress的模板的用法,就是如此,很简洁。 关于那个用class来当静态函数的容器,其实直接把函数写进同一个文件里就好了,完全不需要拿个class来包装。 |
|
返回顶楼 | |
发表时间:2009-06-22
Xorcerer 写道 kingheaven 写道 xieye 写道 luolonghao 写道 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Example</title> </head> <body> <?php echo "Hi, I'm a PHP script!"; ?> </body> </html> 实际项目的页面怎么可能这么简单呢。。 所以,模板是肯定用到的。 PHP本身就是模板语言啊~所以不需要再使用任何模板了~把值传到PHP页面,直接拿PHP来处理输出就可以了。 我也是这样想的,看看Wordpress的模板的用法,就是如此,很简洁。 关于那个用class来当静态函数的容器,其实直接把函数写进同一个文件里就好了,完全不需要拿个class来包装。 类就相当于命令空间,这样可以有重名的函数。当然更好。不然得有多少下划线在函数名中。 |
|
返回顶楼 | |
发表时间:2009-06-22
only_java 写道 diogin 写道 only_java 写道 dualface 写道 php 没有线程,运行模式也和 java 完全不同,还是多多补充基础知识吧 你开玩笑吧,php没多线程?pcntl_fork 兄台,你开玩笑吧,pcntl_fork 是线程? 老兄不要跟我玩文字游戏好不?我的意思是可以实现多线程,老实讲我没搞过,只是记得某本书上讲过,所以不多做评论 PHP 脚本里不能实现多线程。网上流传的PHP脚本实现多线程的说法,基本上是不知道什么叫多线程。 PHP 解释器里的线程通过 TSRM 层已经完全对 PHP 脚本实现屏蔽。 Python 解释器上倒是允许在脚本层面控制线程。 |
|
返回顶楼 | |
发表时间:2009-06-23
我没用过php,不过貌似oo的基本概念应该是一样的撒?
static不static主要还是看有没有对状态的依赖,如果没有的话,每次调用的所有变量都是本地的话,肯定就static咯,方便嘛,当然不用static,用单例也可以,但是static的时候就是classloader给做了单例了,一个loader里面就一个class的对象。 其实java的constructor里面一般都建议使用super(xxx)跟parent::__construct()应该是一个意思撒。 对象存在在运行时候的内存里面,每个对象都有到数据的引用和到非static的方法的引用。对象存在的意义主要是保持状态,然后非static的方法运行时候可以通过this这个bt的关键字作为上下文。 类是元素据啦,就是描述了结构(数据类型)和行为(方法的签名)的集合。运行时候类自己也会被加载,成为一个对象。static的属性和方法其实是这个 类对象 自己的东西,而不是 类实例化的对象 的东西。当然我比较不喜欢java的关于static的实现方式,但是鉴于是静态的,也没办法。 所有对象都有类,对象在运行时存在,运行时每个对象对应的类也是个对象,这个 类对象 本身也有个类, 所有 类对象 的类在java里面就是Class.class,运行时候这个Class本身也是一个对象..有点绕口撒 简单例子一个 Class A 运行时候如果某方法里面是 A a=.... 这个时候 a.getClass()就是A,这个A是对象哦 a.getClass().getClass()就是Class,这个也是对象啦,运行时候啥都是对象嘛 只不过每个对象都能找到对应的class,里面描述了 这种对象的 元数据啦 很绕,自己看都糊涂 |
|
返回顶楼 | |
发表时间:2009-06-23
diogin 写道 only_java 写道 diogin 写道 only_java 写道 dualface 写道 php 没有线程,运行模式也和 java 完全不同,还是多多补充基础知识吧 你开玩笑吧,php没多线程?pcntl_fork 兄台,你开玩笑吧,pcntl_fork 是线程? 老兄不要跟我玩文字游戏好不?我的意思是可以实现多线程,老实讲我没搞过,只是记得某本书上讲过,所以不多做评论 PHP 脚本里不能实现多线程。网上流传的PHP脚本实现多线程的说法,基本上是不知道什么叫多线程。 PHP 解释器里的线程通过 TSRM 层已经完全对 PHP 脚本实现屏蔽。 Python 解释器上倒是允许在脚本层面控制线程。 我记得PHP的多线程是拿Apache模拟出来的, 不是真实的多线程. |
|
返回顶楼 | |