如何在PHP中向父类构造函数传递参数?

3

我有两个类,其中子类继承了父类。

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
实际上,继承的概念有点不同,你不能直接调用构造函数,它会自动调用。要在父类中传递$argument,你需要在子类中提供它。 - Merv
2
@Merv 如果父类的构造函数没有参数,它才能自动调用。但即使在这种情况下,PHP也不是这样工作的。程序员必须在派生类的构造函数中显式调用父类的构造函数。 - axiac
1
你的逻辑没有问题,但是你的代码有两个小错误。你不能使用parent作为类名。你需要选择另一个名称,并将child extends parent改为相同的名称。但是不要改变parent::__construct...,在这里你使用了保留关键字。第二个问题是@Merv刚才提到的,应该是__construct而不是constuctor - jh1711
3
еҸҜд»Ҙзҡ„гҖӮдҪ зҡ„д»Јз ҒзңӢиө·жқҘжІЎй—®йўҳпјҢеҰӮжһңдҪ жҠҠparentзұ»зҡ„еҗҚз§°ж”№дёәParentClassжҲ–е…¶д»–еҗҚз§°пјҢ并е°Ҷ__constructor()ж”№дёә__construct()пјҢйӮЈд№Ҳе°ұжІЎй—®йўҳдәҶгҖӮ - Merv
1
问题中的代码现在看起来没问题。当然,你需要调用new child;才能看到任何输出。 - jh1711
显示剩余5条评论
1个回答

0

不是直接的答案,但如果我正确地阅读了代码,你实际上并不想将一个变量/值传递给构造函数。相反,你想传递一个固定的类属性,比如表名。

在这种情况下,你可以在子类中使用一个常量,并在父类的构造函数中设置它。如果这是你想要做的全部,那么子类就不需要一个单独的构造函数。

所以可以这样做

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); - Abhijit Srivastava
1
@AbhijitSrivastava 不,常量可以是一个数组,不需要进行序列化和反序列化。 - jeroen
没有必要将其设为类常量。一个普通的属性就足够了。 - salathe
@salathe 是的,但是对于一个类的表名,我可能会使用一个常量。 - jeroen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接