2017-09-04 220 views
1

我父母在那裏由孩子繼承2班。將參數傳遞給PHP中的父類構造函數?

class parentClass 
{ 
    private $table_name=''; 

    public function __construct($argument) 
    { 
     $this->table_name=$argument; 
     echo $this->table_name; 
    } 
} 

class child extends parentClass 
{ 
    private $table="student"; 

    public function __construct() 
    { 
     parent::__construct($this->table); 
    } 
} 

有這樣下面的一些東西已被使用,但我無法理解如何以及爲什麼。

$args = func_get_args(); 
call_user_func_array(array($this, 'parent::__construct'), $args); 

幫我

什麼應該是正確的代碼來實現正確的邏輯 並請參考以獲得更好的理解支持。

+1

事實上,繼承的概念是一個有點不同,你不能調用構造函數直接,它被自動調用。 沿着父類的$參數傳遞,您需要提供它的子類。 – Merv

+0

@Merv I一些如何需要** $ table **的值移動到** $ table_name **,即孩子到父母。 –

+2

@Merv父類的構造函數只有在沒有參數的情況下才能被自動調用。但即使在這種情況下,這不是PHP的工作原理。程序員必須在派生類的構造函數中顯式調用父類的構造函數。 – axiac

回答

0

不是一個直接的答案,但是如果我正確地讀取了代碼,您並不是真的想將一個變量/值傳遞給構造函數。相反,你想傳遞一個像表名一樣的固定類屬性。

在這種情況下,你可以在子類中使用常量,並設置在父類的構造。如果你想要這樣做的話,子類不需要單獨的構造函數。

所以something like

class parentClass 
{ 
    private $table_name; 

    function __construct() { 
     $this->table_name = static::TABLE; 
     echo $this->table_name; 
    } 
} 

class childClass extends parentClass 
{ 
    const TABLE = "student"; 
} 

$obj = new childClass(); 
+2

謝謝,夥計,你實際上得到我的問題, 在一個陣列的情況下,我必須這樣做(我猜)? define(「FRUITS」,serialize(array(「apple」,「cherry」,「banana」))); $ my_fruits = unserialize(FRUITS); –

+1

@AbhijitSrivastava不,常量可以是一個數組,不需要序列化和反序列化。 – jeroen

+0

這不需要是類常量。一個普通的舊財產將會很好。 – salathe

相關問題