2013-12-15 45 views
-1
class Hello { 
    public function hi() { 
     echo "Hello, hi!\n"; 
    } 
} 

class ParentClass { 
    public $obj; 
    public function __construct() { 
     $this->obj = new Hello; 
    } 
} 

class Test extends ParentClass { 
    public function __construct() { 
     $this->obj->hi(); 
    } 
} 

$temp = new Test; 

我得到的错误信息是“调用非成员函数hi()对象”。 $ obj应该引用类“Hello”的一个实例,但它显然不是 - 我做错了什么?PHP类属性引用对象

+0

'$ OBJ != $ this-> obj' –

+0

我只是在复制代码时忘了$ this。 – user3033490

+1

我不知道,但可能是父类的构造函数是不会自动 – silentboy

回答

2

你在你的Test类中定义__construct()但不能调用父类的构造。如果您想要执行父构造函数,则需要明确指定。呼叫添加到ParentClass构造在Test类的构造函数。

class Test extends ParentClass { 
    public function __construct() { 
     parent::__construct(); 
     $this->obj->hi(); 
    } 
} 

另外,作为@Tasos Bitsios在他的评论中指出的,你还需要如下更新您ParentClass构造:

class ParentClass { 
    public $obj; 
    public function __construct() { 
     $this->obj = new Hello; // Use $this->obj and not just $obj. 
    } 
} 
+0

还呼吁:在父类的构造函数:$ this-> OBJ =而非$ OBJ = –

+0

谢谢,我明白了。当我必须明确调用构造函数时是否有规则? – user3033490

+0

@TasosBitsios,谢谢你指出。我已经添加了答案。 – vee

0

您需要调用父类的构造:

class Test extends ParentClass { 
    public function __construct() { 
     parent::__construct(); 
     $this->obj->hi(); 
    } 
}