2017-09-04 204 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

相关问题