ThinkPHP中initialize和construct的不一樣

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

相關文章
相關標籤/搜索