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的不一樣