2010-08-13 139 views
20

我是wonderinf如果你能幫助我..PHP - 擴展__construct

我有兩個班,一個擴展等.. B級將通過各種不同的對象進行擴展,並用於公共數據庫的交互..現在我想B類處理其連接和斷開無方向從A類或任何外部輸入..

從我所瞭解的問題是,擴展類將不會自動運行__construct函數..是否有解決這個問題的方法?

在此先感謝..

class a extends b 
{ 
    public function __construct() 
    { 
    } 

    public function validateStuff() 
    { 
     $this->insert_record(); 
    } 
} 

class b 
{ 
    public function __construct() 
    { 
     $this->connect(); 
    } 

    protected function connect() 
    { 
     return true; 
    } 

    public function insert_record() 
    { 
     return true; 
    } 
} 

回答

55

父如果實例子類B類中定義的方法__construct()會自動運行,除非在一個類中定義的方法__construct()

class a extends b { 
} 

class b { 
    public function __construct() 
    { 
     echo 'In B Constructor'; 
    } 
} 

$x = new a(); 

如果__construct()方法在類定義的,那麼這將覆蓋使用中類B的方法__construct()的....它將運行代替 B類__construct()方法

class a extends b { 
    public function __construct() 
    { 
     echo 'In A Constructor'; 
    } 
} 

class b { 
    public function __construct() 
    { 
     echo 'In B Constructor'; 
    } 
} 

$x = new a(); 

因此,如果您的子類中定義了__construct()方法,那麼如果您想要執行該方法,則需要顯式調用父類的構造函數。

class a extends b { 
    public function __construct() 
    { 
     parent::__construct(); 
     echo 'In A Constructor'; 
    } 
} 

class b { 
    public function __construct() 
    { 
     echo 'In B Constructor'; 
    } 
} 

$x = new a(); 
+3

謝謝:) - stackoverflow是非常好的有和找到相關的信息,你可以盡情享受這樣的工作流程,「像,我知道這一點,但我只是想確保我沒有碰到一個PHP的直覺怪僻的地方」 - 謝謝哈哈! – lol 2013-05-07 13:43:42

10

我不知道我完全理解你的要求,但你可以叫家長從孩子的構造

parent::__construct(); 

這就是構建方法只有我知道的選項。

+0

我不想從類a調用所有的構造函數。我希望找到一個方法來應用b類的構造函數來自動運行。 – Lee 2010-08-13 13:43:52

3

呼叫parent::__construct()a::__construct()

class a extends b 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function validateStuff() 
    { 
     $this->insert_record(); 
    } 
} 

可以省略的構造完全,如果你沒有做任何一個特定的東西。

+0

我不想從類a調用構造函數..我希望找到一個方法來應用b類的構造函數來自動運行.. – Lee 2010-08-13 13:43:34

+0

啊這是答案..通過將構造函數從類A ,B班跑了!謝謝! – Lee 2010-08-13 13:51:45