为什么要调用父代的构造函数

时间:2017-04-04 00:12:00

标签: php inheritance constructor spl-autoload-register

我有最简单的代码:

接口

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

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

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类通过spl_autoload_register函数自动加载我的类。因为在Admin类中我不调用父构造函数,所以它不应该执行父构造函数中的内容吗?

输出

SHOULD NOT BE CALLED AUTOMATICALLY

可能遗漏了一些显而易见的东西,但却无法弄清楚为什么会这样。

1 个答案:

答案 0 :(得分:1)

Docs州:

  

如果子类,则不会隐式调用父构造函数   定义了一个构造函数。

所以你必须这样做才能阻止你所看到的:

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

    }
  function Create($id)
  {
  }

  function Read($id)
  {
  }

  function Update($id)
  {
  }

  function Delete($id)
  {
  }
}