2012-11-10 106 views
2

我嘗試撥打getTest()函數裏面的子類類。 首先我初始化實例分機類,所以我假設主要屬性$ ext現在應該包含它。但兒童類沒有繼承它,並獲得錯誤信息是:繼承PHP中的實例

調用一個成員函數getTest()非對象

在哪裏的問題呢?

<?php 

$A = new Main; 

class Main 
{ 
    protected $ext = null; 
    function __construct() 
    { 
     $this->ext= new Ext(); 
     new Child; 
    } 
} 

class Child extends Main 
{ 
    function __construct() 
    { 
     echo $this->ext->getTest(); 
    } 
} 


class Ext extends Main 
{ 

    public function getTest() 
    { 
     return "cool"; 
    } 
} 

?> 

我知道,要解決它其他的方式,我可以使用:

class Child 
{ 
    private $Main; 
    function __construct(&$Main) { ... } 
} 

,但我想知道爲什麼不工作..

回答

2

在結構上的物體的瞬間該屬性還沒有價值。

您需要調用父構造函數之前使用屬性

function __construct() 
{ 
    parent::__construct(); 
    echo $this->ext->getTest(); 
} 
+0

這會給一個致命的錯誤,像最大函數嵌套水平達到 –

+0

當調用父:: __構造,它再次調用子類,然後再次調用父類的子類。這將繼續循環。 –