ThinkPHP之__construct()和__initialize()

來源:互聯網
上載者:User

標籤:function   put   func   extend   建構函式   eth   tput   函數   rcu   

本文轉自:http://blog.csdn.net/e421083458/article/details/16339711/

ThinkPHP中的__initialize()和類的建構函式__construct()
網上有很多關於__initialize()的說法和用法,總感覺不對頭,所以自己測試了一下。將結果和大家分享。不對請更正。
首先,我要說的是
1、__initialize()不是php類中的函數,php類的建構函式只有__construct().
2、類的初始化:子類如果有自己的建構函式(__construct()),則調用自己的進行初始化,如果沒有,則調用父類的建構函式進行自己的初始化。
3、當子類和父類都有__construct()函數的時候,如果要在初始化子類的時候同時調用父類的__constrcut(),則可以在子類中使用parent::__construct().

如果我們寫兩個類,如下:

 

[php] view plain copy  print?
  1. class Action{  
  2.     public function __construct()  
  3.     {  
  4.         echo ‘hello Action‘;  
  5.     }  
  6. }  
  7. class IndexAction extends Action{  
  8.     public function __construct()  
  9.     {  
  10.         echo ‘hello IndexAction‘;  
  11.     }  
  12. }  
  13. $test = new IndexAction;  
  14. //output --- hello IndexAction  


很明顯初始化子類IndexAction的時候會調用自己的構造器,所以輸出是‘hello IndexAction‘。
但是將子類修改為

 

 

[php] view plain copy  print?
  1. class IndexAction extends Action{  
  2.     public function __initialize()  
  3.     {  
  4.         echo ‘hello IndexAction‘;  
  5.     }  
  6. }  


那麼輸出的是‘hello Action‘。因為子類IndexAction沒有自己的構造器。
如果我想在初始化子類的時候,同時調用父類的構造器呢?

 

 

[php] view plain copy  print?
  1. class IndexAction extends Action{  
  2.     public function __construct()  
  3.     {  
  4.         parent::__construct();  
  5.         echo ‘hello IndexAction‘;  
  6.     }  
  7. }  


這樣就可以將兩句話同時輸出。
當然還有一種辦法就是在父類中調用子類的方法。

 

 

[php] view plain copy  print?
  1. class Action{  
  2.     public function __construct()  
  3.     {  
  4.         if(method_exists($this,‘hello‘))  
  5.         {  
  6.             $this -> hello();  
  7.         }  
  8.         echo ‘hello Action‘;  
  9.     }  
  10. }  
  11. class IndexAction extends Action{  
  12.     public function hello()  
  13.     {  
  14.         echo ‘hello IndexAction‘;  
  15.     }  
  16. }  


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

ThinkPHP之__construct()和__initialize()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.