2017-09-04 13 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私はいくつかの**テーブル$ **の値を** $ 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

関連する問題