【发布时间】:2018-02-13 01:07:09
【问题描述】:
我有 2 个类,其中父由子继承。
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);
帮我做
实现正确逻辑的正确代码应该是什么 并请参考支持它以获得更好的理解。
【问题讨论】:
-
其实继承的概念有点不一样,不能直接调用构造函数,是自动调用的。要在父类中传递 $argument,您需要在子类中提供它。
-
@Merv 父类的构造函数只有在没有参数的情况下才会被自动调用。但即使在这种情况下,这也不是 PHP 的工作方式。程序员必须在派生类的构造函数中显式调用父类的构造函数。
-
你的逻辑没有缺陷,但你的代码有两个小缺陷。您不能使用
parent作为类名。您需要选择另一个名称,并将child extends parent更改为相同的名称。但是不要更改parent::__construct...,这里使用的是保留关键字。刚才提到的第二个@Merv,是__construct而不是constuctor。 -
是的,你可以。您的代码看起来不错,如果您将
parent的类名更改为ParentClass或其他名称,并将__constructor()更改为__construct(),您应该没问题。 -
问题中的代码现在看起来没问题。当然,您需要致电
new child;查看任何输出。
标签: php inheritance constructor