论坛首页 编程语言技术论坛

搞不懂php中的面向对象

浏览 20989 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-06-22  
楼上说的有道理,谢谢你的推荐!
0 请登录后投票
   发表时间:2009-06-22  
diogin 写道
only_java 写道
dualface 写道

php 没有线程,运行模式也和 java 完全不同,还是多多补充基础知识吧

你开玩笑吧,php没多线程?pcntl_fork

兄台,你开玩笑吧,pcntl_fork 是线程?

老兄不要跟我玩文字游戏好不?我的意思是可以实现多线程,老实讲我没搞过,只是记得某本书上讲过,所以不多做评论
0 请登录后投票
   发表时间:2009-06-22  
pcntl_fork 是你写的程序,,而不是php本身。。
0 请登录后投票
   发表时间: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水平也不怎么样。。。

0 请登录后投票
   发表时间: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来处理输出就可以了。
0 请登录后投票
   发表时间: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来包装。
0 请登录后投票
   发表时间: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来包装。



类就相当于命令空间,这样可以有重名的函数。当然更好。不然得有多少下划线在函数名中。
0 请登录后投票
   发表时间:2009-06-22  
only_java 写道
diogin 写道
only_java 写道
dualface 写道

php 没有线程,运行模式也和 java 完全不同,还是多多补充基础知识吧

你开玩笑吧,php没多线程?pcntl_fork

兄台,你开玩笑吧,pcntl_fork 是线程?

老兄不要跟我玩文字游戏好不?我的意思是可以实现多线程,老实讲我没搞过,只是记得某本书上讲过,所以不多做评论

PHP 脚本里不能实现多线程。网上流传的PHP脚本实现多线程的说法,基本上是不知道什么叫多线程。
PHP 解释器里的线程通过 TSRM 层已经完全对 PHP 脚本实现屏蔽。

Python 解释器上倒是允许在脚本层面控制线程。
0 请登录后投票
   发表时间: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,里面描述了 这种对象的 元数据啦

很绕,自己看都糊涂

0 请登录后投票
   发表时间: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模拟出来的, 不是真实的多线程.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics