PHP延遲靜態(tài)綁定使用方法實(shí)例解析
PHP的繼承模型中有一個(gè)存在已久的問(wèn)題,那就是在父類中引用擴(kuò)展類的最終狀態(tài)比較困難。我們來(lái)看一下代碼清單5-11中的例子。
代碼清單5-11 意想不到的繼承
<?php class ParentBase { static $property = 'Parent Value'; public static function render() { return self::$property; } } class Descendant extends ParentBase { static $property = 'Descendant Value'; } echo Descendant::render(); Parent Value
在這個(gè)例子中,render()方法中使用了self關(guān)鍵字,這是指ParentBase類而不是指Descendant類。在ParentBase::render()方法中沒(méi)法訪問(wèn)$property的最終值。為了解決這個(gè)問(wèn)題,需要在子類中重寫render()方法。
通過(guò)引入延遲靜態(tài)綁定功能,可以使用static作用域關(guān)鍵字訪問(wèn)類的屬性或者方法的最終值,如代碼所示。
<?php class ParentBase { static $property = 'Parent Value'; public static function render() { return static::$property; } } class Descendant extends ParentBase { static $property = 'Descendant Value'; } echo Descendant::render(); Descendant Value
通過(guò)使用靜態(tài)作用域,可以強(qiáng)制PHP在最終的類中查找所有屬性的值。除了這個(gè)延遲綁定行為,PHP還添加了get_called_class()函數(shù),這允許檢查繼承的方法是從哪個(gè)派生類調(diào)用的。以下代碼顯示了使用get_called_class()函數(shù)獲得當(dāng)前的類調(diào)用場(chǎng)景的方法。
使用get_called_class()方法
<?php class ParentBase { public static function render() { return get_called_class(); } } class Decendant extends ParentBase {} echo Descendant::render(); Descendant
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
php實(shí)現(xiàn)簡(jiǎn)單的守護(hù)進(jìn)程創(chuàng)建、開啟與關(guān)閉操作
這篇文章主要介紹了php實(shí)現(xiàn)簡(jiǎn)單的守護(hù)進(jìn)程創(chuàng)建、開啟與關(guān)閉操作,結(jié)合實(shí)例形式分析了基于pcntl擴(kuò)展的php守護(hù)進(jìn)程類定義、啟動(dòng)及關(guān)閉等相關(guān)操作技巧,需要的朋友可以參考下2019-08-08PHP中調(diào)用ASP.NET的WebService的代碼
創(chuàng)建一個(gè)C#的web service,這個(gè)就不多說(shuō)了,我用vs2008的wizard創(chuàng)建了一個(gè)最簡(jiǎn)單的,讓它運(yùn)行在:http://localhost/webservice1/service1.asmx2011-04-04PHP實(shí)現(xiàn)自動(dòng)識(shí)別Restful API的返回內(nèi)容類型
這篇文章主要介紹了PHP實(shí)現(xiàn)自動(dòng)識(shí)別Restful API的返回內(nèi)容類型,并實(shí)現(xiàn)自動(dòng)自動(dòng)渲染成 json、xml、html、serialize、csv、php等數(shù)據(jù)格式輸出,需要的朋友可以參考下2015-02-02PHPExcel在linux環(huán)境下導(dǎo)出報(bào)500錯(cuò)誤的解決方法
下面小編就為大家?guī)?lái)一篇PHPExcel在linux環(huán)境下導(dǎo)出報(bào)500錯(cuò)誤的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01php中json_decode()和json_encode()的使用方法
json_decode對(duì)JSON格式的字符串進(jìn)行編碼而json_encode對(duì)變量進(jìn)行 JSON 編碼,需要的朋友可以參考下2012-06-06PHP對(duì)XML內(nèi)容進(jìn)行修改和刪除實(shí)例代碼
這篇文章給大家主要介紹了利用PHP對(duì)XML內(nèi)容進(jìn)行修改和刪除的原理和方法,文中通過(guò)示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)很有幫助,感興趣的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-10-10簡(jiǎn)單談?wù)刾hp浮點(diǎn)數(shù)精確運(yùn)算
如果用php的+-*/計(jì)算浮點(diǎn)數(shù)的時(shí)候,可能會(huì)遇到一些計(jì)算結(jié)果錯(cuò)誤的問(wèn)題,所以基本上大部分語(yǔ)言都提供了精準(zhǔn)計(jì)算的類庫(kù)或函數(shù)庫(kù),比如php有BC高精確度函數(shù)庫(kù),下面我們介紹一下一些常用的BC高精確度函數(shù)使用。2016-03-03