__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()而已。