_initialize

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、当父类中存在

thinkphp 中_initialize和__construct的区别

你。 提交于 2019-12-06 00:31:27
最近在模仿写一个权限管理系统,其中在继承AuthController中用到了_initialize。 class AuthController extends Controller { protected function _initialize(){ } } 首先,_initialize并非php类中的函数,它是由Think\Controller.class.php实现的一个构造函数方法 我们看看源码 public function __construct() { Hook::listen('action_begin',$this->config); //实例化视图类 $this->view = Think::instance('Think\View'); //控制器初始化 if(method_exists($this,'_initialize')) $this->_initialize(); } 从上面可以看出在实例化父类的Controller后,如果子类中存在_initialize方法时,则执行。 此时_initialize相当于子类的构造函数。 那么子类中可不可以用__construct充当构造函数呢? 当在子类中使用__construct的时候,相当于重载了父类的 __construct方法,故父类的构造函数不执行。 所以在子类中要加载父类的构造函数。 class