<?phpclass a {
public $aa; public function fun1($v) {
$this->aa = 'abc';
return 'a_fun1 : '.$this->aa.$v.'<br>';
}
}$a = new a();
echo $a->fun1('111');
class b {
public $bb;   public function fun1() {
$this->a->aa = 'edf'; // 如果没有这句,会返回 b_fun1 : 
$this->bb = 'b_fun1 : '.$this->a->aa.'<br>';
return $this->bb;
   } public function fun2() {
$this->a1 = new a(); // 这里为a1, 即不一定是对象a
return $this->a1->fun1('222');
}}$b = new b();
echo $b->fun1();
echo $b->fun2();?>结果为:a_fun1 : abc111
b_fun1 : edf
a_fun1 : abc222谁能解释一下???

解决方案 »

  1.   

    <?php
    error_reporting(E_ALL);
    class a {
        public $aa;    public function fun1($v) {
            $this->aa = 'abc';
            return 'a_fun1 : '.$this->aa.$v.'<br>';
        }
    }$a = new a();
    echo $a->fun1('111');
    class b {
        public $bb;      public function fun1() {
    //var_dump($this->a);
    // 这里创建了一个空对象实例a,然后增加一个aa(值为edf)的属性
            $this->a->aa = 'edf';    // 如果没有这句,会返回 b_fun1 :,没有这一句,什么都没有获取到,未设置的对象属性a和没有对象的属性aa在php最多有一个警告而已
    //var_dump($this->a); // 2句var_dump注释去掉就可以看的很明白,和上面的对象a没有什么关系

            $this->bb = 'b_fun1 : '.$this->a->aa.'<br>';

            return $this->bb;
          }    public function fun2() {
    // a1确实不是对象a,但它是对象a的一个实例
            $this->a1 = new a();    // 这里为a1, 即不一定是对象a
            return $this->a1->fun1('222');
        }}$b = new b();
    echo $b->fun1();
    echo $b->fun2();?>
      

  2.   

    有什么问题吗, 程序没问题.
    php是弱类型, 当你定义的变量不存在时会自动生成, 这个变量可以是任何类型,可以是类的对象, 变量任务值, 类的属性等等
    如, 
    $this->a->aa = XXx;   // 这些属性都会在你所定义的类里自动生成
    $this->a1 = new a();   
      

  3.   


    在php的低层(C语言)运行里有一个C结构变量存放着php脚本定义的所有变量和这变量的类型和值所以, 当你使用的 $this->a = XX; 不存在时, 会自动生成并赋值, 就像 $a = XX; 一样,