【问题标题】:Pass arguments to parent class constructor in PHP?将参数传递给PHP中的父类构造函数?
【发布时间】: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


【解决方案1】:

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

在这种情况下,您可以在子类中使用一个常量并在父类的构造函数中设置它。如果您只想这样做,子类将不需要单独的构造函数。

所以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();

【讨论】:

  • 谢谢,你实际上得到了我的问题,如果是数组,我需要这样做(我猜)?定义(“水果”,序列化(数组(“苹果”,“樱桃”,“香蕉”))); $my_fruits = 反序列化 (FRUITS);
  • @AbhijitSrivastava 不,常量可以是数组,不需要序列化和反序列化。
  • 这不需要是一个类常量。一个普通的旧属性就可以了。
  • @salathe 是的,但是对于一个类的表名,我可能会使用一个常量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 2023-04-04
  • 2015-10-11
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
相关资源
最近更新 更多