ThinkPHP中__initialize()和類(lèi)的構(gòu)造函數(shù)__construct()用法分析
本文實(shí)例分析了ThinkPHP中的__initialize()和類(lèi)的構(gòu)造函數(shù)__construct()。分享給大家供大家參考。具體分析如下:
thinkphp中的__construct是不可以隨便用的,因?yàn)槟愕哪K類(lèi)繼承上級(jí)類(lèi),上級(jí)類(lèi)有定義好的;
1、__initialize()不是php類(lèi)中的函數(shù),php類(lèi)的構(gòu)造函數(shù)只有__construct().
2、類(lèi)的初始化:子類(lèi)如果有自己的構(gòu)造函數(shù)(__construct()),則調(diào)用自己的進(jìn)行初始化,如果沒(méi)有,則調(diào)用父類(lèi)的構(gòu)造函數(shù)進(jìn)行自己的初始化。
3、當(dāng)子類(lèi)和父類(lèi)都有__construct()函數(shù)的時(shí)候,如果要在初始化子類(lèi)的時(shí)候同時(shí)調(diào)用父類(lèi)的__constrcut(),則可以在子類(lèi)中使用parent::__construct().
如果我們寫(xiě)兩個(gè)類(lèi),如下:
public function __construct()
{
echo 'hello Action';
}
}
class IndexAction extends Action{
public function __construct()
{
echo 'hello IndexAction';
}
}
$test = new IndexAction;
//output --- hello IndexAction
很明顯初始化子類(lèi)IndexAction的時(shí)候會(huì)調(diào)用自己的構(gòu)造器,所以輸出是'hello IndexAction',但是將子類(lèi)修改為:
public function __initialize()
{
echo 'hello IndexAction';
}
}
那么輸出的是'hello Action',因?yàn)樽宇?lèi)IndexAction沒(méi)有自己的構(gòu)造器,如果我想在初始化子類(lèi)的時(shí)候,同時(shí)調(diào)用父類(lèi)的構(gòu)造器呢?
public function __construct()
{
parent::__construct();
echo 'hello IndexAction';
}
}
這樣就可以將兩句話同時(shí)輸出,當(dāng)然還有一種辦法就是在父類(lèi)中調(diào)用子類(lèi)的方法.
public function __construct()
{
if(method_exists($this,'hello'))
{
$this -> hello();
}
echo 'hello Action';
}
}
class IndexAction extends Action{
public function hello()
{
echo 'hello IndexAction';
}
}
這樣也可以將兩句話同時(shí)輸出,而這里子類(lèi)中的方法hello()就類(lèi)似于ThinkPHP中__initialize()。
所以,ThinkPHP中的__initialize()的出現(xiàn)只是方便程序員在寫(xiě)子類(lèi)的時(shí)候避免頻繁的使用parent::__construct(),同時(shí)正確的調(diào)用框架內(nèi)父類(lèi)的構(gòu)造器,所以,我們?cè)赥hnikPHP中初始化子類(lèi)的時(shí)候要用__initialize(),而不用__construct(),當(dāng)然你也可以通過(guò)修改框架將__initialize()函數(shù)修改為你喜歡的函數(shù)名.
希望本文所述對(duì)大家的ThinkPHP框架程序設(shè)計(jì)有所幫助。
- 淺談ThinkPHP中initialize和construct的區(qū)別
- ThinkPHP中類(lèi)的構(gòu)造函數(shù)_construct()與_initialize()的區(qū)別詳解
- PHP正則替換函數(shù)preg_replace()報(bào)錯(cuò):Notice Use of undefined constant的解決方法分析
- php類(lèi)中的$this,static,final,const,self這幾個(gè)關(guān)鍵字使用方法
- 解析php中static,const與define的使用區(qū)別
- PHP運(yùn)行出現(xiàn)Notice : Use of undefined constant 的完美解決方案分享
- php面向?qū)ο笕ヂ?(十) final static const關(guān)鍵字的使用
- PHP const定義常量及global定義全局常量實(shí)例解析
相關(guān)文章
織夢(mèng)sitemap地圖實(shí)時(shí)推送給百度的教程
這篇文章主要介紹了織夢(mèng)sitemap地圖實(shí)時(shí)推送給百度的教程,需要的朋友可以參考下2015-08-08php實(shí)現(xiàn)文本數(shù)據(jù)導(dǎo)入SQL SERVER
php將文本文件導(dǎo)入mysql我們經(jīng)常遇到,但是如果是導(dǎo)入到sqlserver又應(yīng)該如何操作呢,下面就給大家分享一下本人的操作方法,感覺(jué)效率還不錯(cuò),這里推薦給大家。2015-05-05ThinkPHP實(shí)現(xiàn)將本地文件打包成zip下載
這篇文章主要介紹了ThinkPHP實(shí)現(xiàn)將本地文件打包成zip下載的方法,需要的朋友可以參考下2014-06-06laravel實(shí)現(xiàn)Auth認(rèn)證,登錄、注冊(cè)后的頁(yè)面回跳方法
今天小編就為大家分享一篇laravel實(shí)現(xiàn)Auth認(rèn)證,登錄、注冊(cè)后的頁(yè)面回跳方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09WordPress免插件實(shí)現(xiàn)面包屑導(dǎo)航的示例代碼
這篇文章主要介紹了WordPress免插件實(shí)現(xiàn)面包屑導(dǎo)航,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08php 利用array_slice函數(shù)獲取隨機(jī)數(shù)組或前幾條數(shù)據(jù)
這篇文章主要介紹了php 利用array_slice函數(shù)獲取隨機(jī)數(shù)組或前幾條數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2015-09-09Laravel + Elasticsearch 實(shí)現(xiàn)中文搜索的方法
這篇文章主要介紹了Laravel + Elasticsearch 實(shí)現(xiàn)中文搜索的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Symfony2使用Doctrine進(jìn)行數(shù)據(jù)庫(kù)查詢方法實(shí)例總結(jié)
這篇文章主要介紹了Symfony2使用Doctrine進(jìn)行數(shù)據(jù)庫(kù)查詢方法,結(jié)合實(shí)例形式總結(jié)分析了基于Doctrine的基本查詢、DQL及查詢生成器的基本實(shí)現(xiàn)方法,需要的朋友可以參考下2016-03-03Thinkphp 框架配置操作之配置加載與讀取配置實(shí)例分析
這篇文章主要介紹了Thinkphp 框架配置操作之配置加載與讀取配置,結(jié)合實(shí)例形式分析了Thinkphp 框架配置操作中配置加載原理、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-05-05