thinkphp _initialize 和 __construct函数的关系

坚强是说给别人听的谎言 提交于 2020-04-07 06:42:35

thinkphp 框架的 _initialize() 函数 和 php 原生的 __construct() 构造函数并没有什么本质上的区别,你完全可以把 _initialize() 作为 __construct() 的别名函数来用,但当你有编写 __construct() 构造函数时 _initialize() 函数就会无效化

php 的 __construct() 函数会被子类继承, 且被子类隐式调用

<?php
class Obj {
    public function __construct() {
        echo __METHOD__ . "<br>";
    }
}

class Person extends Obj {
    public function __construct() {
        // 调用父类构造函数
        parent::__construct();
        echo __METHOD__ . "<br>";
    }
}

$person = new Person();
?>

当子类中无 __construct() 构造函数的定义时则执行父类的构造函数

当子类中定义了(可以理解为重写)__construct() 则执行子类自身的构造函数,但可以通过 parent::__construct() 调用父类的构造函数

thinkphp 的 _initialize() 函数有着同样的机理

1、当父类中存在 _initialize() 时会被子类继承 且在子类被实例化时运行

2、当子类中存在 _initialize() 时父类的 _initialize() 不会自动运行,如果需要可使用 parent::_initialize()调用

所以 __construct() 和  _initilize() 你可以二者选其一,当然如果你写了 __construct() 时本类的 _initialize() 就会失效了

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!