Superclass的构造函数是在PHP中的子构造函数中运行的吗?

Cli*_*ote 0 php oop

如果我有这个课程:

<?php
class Model
{
    var $db;

    function Model()
    {
        $this->db=new Db_Class();
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

以及扩展父类的第二个类:

<?php
class LessonModel extends Model
{

    public function LessonModel()
    {
        //code here
    }

    public function getTitle($id)
    {
       $this->db->setTable('myTable');
       return $this->db->get('title',$id);
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

是否可以安全地假设该$LessonModel->db字段已由父Model类的构造函数实例化,或者我是否需要使用类似的东西手动运行它parent::Model();

Tom*_*igh 10

您不能假设已经调用了父构造函数,因为您已在子类中重写了它.你需要parent::Model()按照你的建议打电话.如果你改变你继承的类,你显然需要改变它.

如果您使用的是PHP5,那么您可以为构造函数命名__construct().这样做的好处是可以通过parent::__construct()在任何派生类中执行而无需指定父类名来轻松调用父构造函数.然后,您可以重新安排类的继承,减少麻烦,减少引入模糊错误的危险.