PHP后期靜態(tài)綁定實(shí)例淺析
本文實(shí)例講述了PHP后期靜態(tài)綁定。分享給大家供大家參考,具體如下:
從php5.3開始,php增加了一個(gè)叫后期綁定的功能,用于在繼承范圍內(nèi)引用靜態(tài)調(diào)用的類
該功能從語(yǔ)言內(nèi)部角度考慮北命名為“后期靜態(tài)綁定”;“后期綁定”意思說(shuō):static::不再被解析為定義當(dāng)前方法所在的類,而是在實(shí)際運(yùn)行時(shí)計(jì)算的,也可以成為“靜態(tài)綁定”;因?yàn)樗梢杂糜冢ǖ幌抻陟o態(tài)方法的調(diào)用)。
self::的限制
使用self::
或者_class_
對(duì)當(dāng)前類的靜態(tài)引用,取決于定義當(dāng)前方法所在的類
例子:
class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); //A
打印結(jié)果:
A
后期靜態(tài)綁定的用法
后期靜態(tài)綁定試圖通過(guò)引入一個(gè)關(guān)鍵字表示運(yùn)行時(shí)最初調(diào)用的類來(lái)繞過(guò)限制。簡(jiǎn)單的說(shuō),這個(gè)關(guān)鍵字能夠讓你在上述中調(diào)用test()時(shí)引用的類是B而不是A。最終決定不引用新的關(guān)鍵字,而是使用已經(jīng)預(yù)留static關(guān)鍵字
例子:
<?php class A { public static function who() { echo __CLASS__; } public static function test() { static::who(); // 后期靜態(tài)綁定從這里開始 } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); ?>
打印結(jié)果是:
B
后期靜態(tài)綁定的處理方式解決了以往完全沒(méi)有解決的靜態(tài)調(diào)用,另外一方面,如果靜態(tài)調(diào)用使用parent::或者self::將轉(zhuǎn)發(fā)調(diào)用信息
<?php class A { public static function foo() { static::who(); } public static function who() { echo __CLASS__."\n"; } } class B extends A { public static function test() { A::foo(); parent::foo(); self::foo(); } public static function who() { echo __CLASS__."\n"; } } class C extends B { public static function who() { echo __CLASS__."\n"; } } C::test(); ?>
打印結(jié)果:
A
C
C
例子:
<?php class a { static public function test() { print get_called_class(); } } class b extends a { } a::test(); b::test(); ?>
打印結(jié)果:
a
b
特別聲明:
get_called_class()
;獲得類的名稱靜態(tài)方法中調(diào)用
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php字符串比較函數(shù)用法小結(jié)(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
這篇文章主要介紹了php字符串比較函數(shù)用法,結(jié)合實(shí)例形式分析了php針對(duì)字符串的比較、排序等操作相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下2016-07-07thinkphp關(guān)于簡(jiǎn)單的權(quán)限判定方法
下面小編就為大家?guī)?lái)一篇thinkphp關(guān)于簡(jiǎn)單的權(quán)限判定方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04dede3.1分頁(yè)文字采集過(guò)濾規(guī)則詳說(shuō)(圖文教程)
dede3.1分頁(yè)文字采集過(guò)濾規(guī)則詳說(shuō)(圖文教程)...2007-04-04CI框架中通過(guò)hook的方式實(shí)現(xiàn)簡(jiǎn)單的權(quán)限控制
這篇文章主要介紹了CI框架中通過(guò)hook的方式實(shí)現(xiàn)簡(jiǎn)單的權(quán)限控制,需要的朋友可以參考下2015-01-01PHP常見(jiàn)的6個(gè)錯(cuò)誤提示及解決方法
自學(xué)黨們?cè)谧詫W(xué)php的時(shí)候,經(jīng)常會(huì)發(fā)生一些小錯(cuò)誤,這篇文章主要介紹了PHP常見(jiàn)的6個(gè)錯(cuò)誤提示及解決方法,感興趣的小伙伴們可以參考一下2016-07-07淺談如何提高PHP代碼質(zhì)量之端到端集成測(cè)試
在本系列的前幾部分中,我們建立了一個(gè)構(gòu)建工具,一些靜態(tài)代碼分析器,并開始編寫單元測(cè)試。為了使我們的測(cè)試堆棧更完整,有一些測(cè)試可以檢查你的代碼是否在真實(shí)環(huán)境中運(yùn)行,以及它是否能在更復(fù)雜的業(yè)務(wù)場(chǎng)景中運(yùn)行良好。2021-05-05