<?phpclass C
{
       function __construct()
       {
           $this->name = 'KOBE';
       }
       public $name = 'K';
}
$c = new C();
echo $c->name;这个程序执行的过程是怎么样的呢?
为什么输出的结果是'KOBE',而不是'B' 呢?

解决方案 »

  1.   

    __construct 是构造函数,他在类实例化时被调用
      

  2.   

    其实 类和函数差不多 当一个php脚本执行的时候,会优先将function 和class这种关键词找出来,声明函数或者类,所以这个时候
    public $name = 'K';就相当于声明了一个类 类里面有一个属性name默认值k, 然后声明了一个构造函数,但是函数不会执行,构造函数在实例化类的时候才执行,这个时候$name 就成了 kobe了 ,这个跟你 public $name = 'K';放函数下面没有关系
      

  3.   

    php代码执行顺序有关,    public $name='K'是这个类创建的时候就已经存在了    ,当你用new实例化对象的时候,构造方法会把原先存在的成员属性$name覆盖为""KOBE"".
      

  4.   

    这个是关于顺序的问题,__construct是在你new的时候才调用的,而public $name = 'K';是在你new之前就已经赋值了,所以你new的时候会重新赋值把原来的覆盖
      

  5.   

    你可以这行理解,public $name = 'K'是声明变量,$this->name = 'KOBE'是赋值,由于php编码没有这么严谨,原则上可以直接赋值,你感觉上回有误差。class C
    {
         public $name = 'K';
           function __construct()
           {
               $this->name = 'KOBE';
           }
      
    }
    $c = new C();
    echo $c->name;
    如果这么写,你是不是就能理解了打个比方,php可以这么写
    $sql="select * from table";但是在c++或者C#中,必须要
    string sql;
    sql=“select * from table";如果你不习惯这种弱类语言的话,
    可以做个修改。。把php.ini中的error_reporting  =  E_ALL & ~E_NOTICE改为error_reporting  = E_NOTICE