thinkphp3有門面類。門面為容器中的類提供了一個(gè)靜態(tài)調(diào)用接口,擁有更好的可測試性和擴(kuò)展性,可以為任何的非靜態(tài)類庫定義一個(gè)門面類,語法為“class Test{public function Class(){return路徑;}}”。
本文操作環(huán)境:Windows10系統(tǒng)、ThinkPHP3版、Dell G3電腦。
thinkphp3有門面類嗎
門面為容器中的類提供了一個(gè)靜態(tài)調(diào)用接口,相比于傳統(tǒng)的靜態(tài)方法調(diào)用, 帶來了更好的可測試性和擴(kuò)展性,你可以為任何的非靜態(tài)類庫定義一個(gè)facade類
為什么使用門面
1、靜態(tài)方法和非靜態(tài)方法的區(qū)別(調(diào)用對(duì)象、引用變量不同)
靜態(tài)方法:是使用static關(guān)鍵字修飾的方法,又叫類方法.屬于類的,不屬于對(duì)象, 在實(shí)例化對(duì)象之前就可以通過類名.方法名調(diào)用靜態(tài)方法。 (靜態(tài)屬性,靜態(tài)方法都是屬于類的,可以直接通過類名調(diào)用)。
A.在靜態(tài)方法中,可以調(diào)用靜態(tài)方法。
B.在靜態(tài)方法中,不能調(diào)用非靜態(tài)方法。
C.在靜態(tài)方法中,可以引用類變量(即,static修飾的變量)。
D.在靜態(tài)方法中,不能引用成員變量(即,沒有static修飾的變量)。
E.在靜態(tài)方法中,不能使用super和this關(guān)鍵字
非靜態(tài)方法:是不含有static關(guān)鍵字修飾的普通方法,又稱為實(shí)例方法,成員方法。屬于對(duì)象的,不屬于類的。(成員屬性,成員方法是屬于對(duì)象的,必須通過new關(guān)鍵字創(chuàng)建對(duì)象后,再通過對(duì)象調(diào)用)。
A.在普通方法中,可以調(diào)用普通方法。
B.在普通方法中,可以調(diào)用靜態(tài)方法
C.在普通方法中,可以引用類變量和成員變量
D.在普通方法中,可以使用super和this關(guān)鍵字
2、靜態(tài)方法和非靜態(tài)方法的區(qū)別(調(diào)用方法不同)
靜態(tài)方法可以直接調(diào)用,類名調(diào)用和對(duì)象調(diào)用。(類名.方法名 / 對(duì)象名.方法名)
但是非靜態(tài)方法只能通過對(duì)象調(diào)用。(對(duì)象名.方法名)
3、靜態(tài)方法和非靜態(tài)方法的區(qū)別(生命周期不同)
靜態(tài)方法的生命周期跟相應(yīng)的類一樣長,靜態(tài)方法和靜態(tài)變量會(huì)隨著類的定義而被分配和裝載入內(nèi)存中。一直到線程結(jié)束,靜態(tài)屬性和方法才會(huì)被銷毀。(也就是靜態(tài)方法屬于類)
非靜態(tài)方法的生命周期和類的實(shí)例化對(duì)象一樣長,只有當(dāng)類實(shí)例化了一個(gè)對(duì)象,非靜態(tài)方法才會(huì)被創(chuàng)建,而當(dāng)這個(gè)對(duì)象被銷毀時(shí),非靜態(tài)方法也馬上被銷毀。(也就是非靜態(tài)方法屬于對(duì)象)
總結(jié):
類方法可以直接通過類名調(diào)用,實(shí)例方法必需先實(shí)例化類,再初始化對(duì)象,然后通過類的實(shí)例對(duì)象才能調(diào)用
如何使用
1、創(chuàng)建一個(gè)需要放置門面類的文件夾 facade
2、寫好自己的公共類
3、在facade創(chuàng)建facade類代碼如下
use think/Facade; class TestFacade extends Facade{ protected static function getFacadeClass(){ return '寫好的目標(biāo)公共類絕對(duì)路徑'; } }
4、調(diào)用這個(gè)公共類的時(shí)候可以直接使用門面類替換公共類,這樣公共類的非靜態(tài)方法也可以使用靜態(tài)調(diào)用了
推薦學(xué)習(xí):《PHP視頻教程》