PHP中__construct()和_initialize()的区别?

__construct()是php内置的构造函数,__initialize()是php框架中定义的(如thinkphp),用法基本一致。

在tp中若父类和子类都有_initialize,则只调用子类的_initialize,并不会自动调用父类_initialize

而子类的__construct方法如果要调用父类的__construct方法,必须在子类构造函数显示调用parent::__construct();

_initialize()是ThinkPHP定义的控制器初始化函数。功能类似于php原生的__construct。 
网上很多人说用_initialize就可以不用写parent::__construct了,这种说话是不对的。 
只有当你的控制器继承了think\Controller时,你可以直接在控制器中使用_initialize(),此时会执行父类的__construct和当前类的_initialize。 
当你的控制器是作为think\Controller的子类的子类时,只会执行think\Controller的__construct和当前类的_initialize,并不会执行父类的_initialize,所以此时还是需要加parent::_initialize这句才行。

其实think\Controller只是在__construct中加了一句:$this->_initialize()而已。
 

你可能感兴趣的:(PHP中__construct()和_initialize()的区别?)