Controller类提供了一个初始化方法_initialize接口,可以用于扩展需要,_initialize方法会在所有操作方法调用之前首先执行
ThinkPHP中initialize()和construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
在网上搜索,很多答案是两者是一样的,ThinkPHP中initialize相当于php的construct,这么说是错误的,如果这样,tp为什么不用construct,而要自己弄一个ThinkPHP版的initialize构造函数呢?
子类的_initialize方法会自动调用父类的_initialize方法。
而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();
显示加入父类构造方法
class IndexController extends Controller { public function __construct(){ echo "111"; parent::__construct(); } public function abc(){ $this->display(); } }
提示:可见已经继承了父类的所有方法
使用 tp自带的 _initialize() 方法
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的不同