2013-12-15 71 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(); 
    } 
}