Controller类提供了一个初始化方法_initialize接口,能够用于扩展须要,_initialize方法会在全部操做方法调用以前首先执行php
ThinkPHP中initialize()和construct()这两个函数均可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不一样呢?框架
在网上搜索,不少答案是二者是同样的,ThinkPHP中initialize至关于php的construct,这么说是错误的,若是这样,tp为何不用construct,而要本身弄一个ThinkPHP版的initialize构造函数呢?函数
子类的_initialize方法会自动调用父类的_initialize方法。this
而php的构造函数construct,若是要调用父类的方法,必须在子类构造函数内显示调用parent::__construct(),不然不会调用父类中的方法;继承
class IndexController extends Controller { public function __construct(){ //parent::__construct(); echo '222'; } public function abc(){ $this->display('index'); } }
提示:接口
display()方法在此类中没有定义,而是在父类Controller中定义的,__construct没有继承父类的构造方法,因此须要在当前类的构造方法中显示父类的构造方法 parent::__construct();it
显示加入父类构造方法io
class IndexController extends Controller { public function __construct(){ echo "111"; parent::__construct(); } public function abc(){ $this->display(); } }
提示:可见已经继承了父类的全部方法function
使用 tp自带的 _initialize() 方法class
class IndexController extends Controller { public function _initialize(){//TP独有的构造方法 echo "111"; } /*public function __construct(){ echo '222'; //parent::__construct(); }*/ public function abc(){ $this->display(); } }
提示:
可知,自动调用了父类的构造方法,继承了父类的全部方法
因此tp的_initialize方法自动调用父类的_initialize方法。而php的构造函数construct,若是要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
这就是ThinkPHP中initialize和construct的不一样