为什么 PHP 不自动调用父构造函数?

2022-08-30 14:36:15

相当直截了当的问题。在C++父构造函数将在子构造函数之前隐式调用,那么PHP不以这种方式做事有什么逻辑呢?

编辑:我从卢克曼那里得到了一个很好的答案,但我希望有更多的理由来解释为什么会有不同。也许问题应该是为什么C++不允许自定义调用父构造函数?我想这是另一个问题。


答案 1

我认为PHP让你手动调用父构造函数是一件好事,因为它允许孩子的构造函数,如下所示:

public function __construct() {
   // set up variables that parent::__construct() requires
   $var1 = get_stuff_from_db();
   $var2 = get_stuff_from_webservice();

   parent::__construct($var1, $var2);

   // continue setting up $this var
   $this->default = 'Default';
   $this->do_some_secret_stuff();
}

甚至:

public function __construct($param) {
   // call differently based on condition
   if (is_array($param))
      $param['id'] = 0;
      parent::__construct($param);
   }
   else {
      parent::__construct($param, 0, TRUE);
   }

   // continue setting up $this var
   $this->default = 'Default';
   $this->do_some_secret_stuff();
}

这意味着,您可以自由地在子级的任何地方调用父构造函数,并且您可以自由地在调用之前和之后做一些事情。这确实不是一个功能吗?


答案 2

如果子类中没有构造函数,则会自动调用父类。

如果决定向子类添加构造函数,则当然需要显式调用父构造函数。如果您已经花时间向子类添加构造函数,那么再添加一行代码似乎并不是什么大不了的事情。但覆盖实际上是一种方便的灵活性。parent::__construct();


推荐