1. 程式人生 > >ThinkPHP中_initialize()與__construct()用法

ThinkPHP中_initialize()與__construct()用法

1 _initialize()不是php類中的建構函式,php類的建構函式只有__construct().

2 類的初始化:子類如果有自己的建構函式__construct(),則呼叫自己的進行初始化,如果沒有,
則呼叫父類的建構函式進行自己的初始化

3 當子類和父類都有__construct()函式的時候,如果要在初始化子類的時候同時呼叫父類的__constrcut(),
則可以在子類中使用parent::__construct().

如果我們寫兩個類,如下

 程式碼如下 複製程式碼

class Action {
   public function __construct(){
       echo 'hello Action';
   }
}   

class IndexAcion extends Action {
   public function __construct(){
       echo 'hello,IndexAction';
   }
}

$test = new IndexAcion();
output --- hello IndexAction

   
很明顯初始化子類IndexAction的時候會呼叫自己的建構函式,所以輸出是'hello IndexAction'
但是將子類修改為

 程式碼如下 複製程式碼
class IndexAcion extends Action {
   public function _initialize(){
       echo 'hello IndexAction';
   }
}

   
那麼輸出的是'hello Action',因為子類IndexAction沒有自己的建構函式
如果我想在初始化子類的時候,同時呼叫父類的構造器呢?

 程式碼如下 複製程式碼

class IndexAcion extends Action {
   public function __construct(){
       parent::__construct();
       echo 'hello IndexAction';
   }
}
   
這樣就可以將兩句話同時輸出
當然還有一種辦法就是在父類中呼叫子類的方法

class Action {
   public function __construct(){
       if(method_exists($this,'hello')){
           $this->hello();
       }
       echo 'hello Action';
   }
}   

class IndexAcion extends Action {
   public function hello(){
       echo 'hello IndexAction';
   }
}

   
這樣也可以將兩句話同時輸出
而這裡子類中的方法hello()就類似於ThinkPHP中_initialize()
所以,ThinkPHP中的_initialize()的出現只是方便程式設計師在寫子類的時候避免頻繁的使用parent::__construct()
同時正確的呼叫框架內父類的建構函式,所以,我們在ThnikPHP中初始化子類的時候要用_initialize(),而不用__construct(),
當然你也可以通過修改框架將_initialize()函式修改為你喜歡的函式

原文章地址:http://www.111cn.net/phper/thinkPhp/60041.htm