为什么要调用 parent 的构造函数

Why is the parent's constructor being called

我有最简单的代码:

界面

interface iCrudRepository{
    public function Create($id);
    public function Read($id);
    public function Update($id);
    public function Delete($id);
}

Parent

class Repository
{
   function __construct()
   {
     echo "SHOULD NOT BE CALLED AUTOMATICALLY";
   }
}

Class

require_once(__DIR__.'/../injection/bootstrap.php');

class Admin extends Repository implements iCrudRepository
{
  function Create($id)
  {
  }

  function Read($id)
  {
  }

  function Update($id)
  {
  }

  function Delete($id)
  {
  }
}

$admin = new Admin();
$admin->Create("Something");

bootstrap class 通过 spl_autoload_register 函数自动加载我的 classes。由于在 Admin class 中我没有调用 parent 构造函数,它不应该执行 parent 构造函数中的内容,对吗?

输出

SHOULD NOT BE CALLED AUTOMATICALLY

这里可能遗漏了一些明显的东西,但不太明白为什么叫它。

Docs 状态:

Parent constructors are not called implicitly if the child class defines a constructor.

所以你必须这样做以防止你看到的东西:

class Admin extends Repository implements iCrudRepository
{
    public function __construct()
    {

    }
  function Create($id)
  {
  }

  function Read($id)
  {
  }

  function Update($id)
  {
  }

  function Delete($id)
  {
  }
}