PHP __call()方法實(shí)現(xiàn)委托示例
本文實(shí)例講述了PHP __call()方法實(shí)現(xiàn)委托。分享給大家供大家參考,具體如下:
委托是指一個(gè)對(duì)象轉(zhuǎn)發(fā)或者委托一個(gè)請(qǐng)求給另一個(gè)對(duì)象,被委托的一方替原先對(duì)象處理請(qǐng)求。這類似于繼承,和在子類中調(diào)用父類的方法有點(diǎn)兒相似。
但在繼承時(shí),父類與子類的關(guān)系是固定的,而使用委托則可以在代碼運(yùn)行時(shí)改變使用的對(duì)象,這意味著委托比繼承具有更大的靈活性。
1、創(chuàng)建一個(gè)類來(lái)將Person類的信息格式化并輸出:
class PersonWriter{ public function writeName(Persion $p){ print $p->getName()."\n"; } public function writeAge(Persion $p){ print $p->getAge()."\n"; } }
2、下面的代碼集合使用__call()方法和PersonWriter類對(duì)象來(lái)實(shí)現(xiàn)Person類:
class Person { private $writer; function __construct(PersonWriter $writer;){ $this->writer = $writer; } function __call($methodname,$args){ if(method_exists($this->writer,$methodname)){ return $this->writer->$methodname($this); } } //... }
代碼中Person類接收一個(gè)PersonWriter對(duì)象作為構(gòu)造方法的參數(shù),并將它保持在屬性變量writer。
在__call()
方法中,使用參數(shù)$methodname,檢查PersonWriter對(duì)象中是否存在同名方法。如果相應(yīng)方法存在,我們就委托PersonWriter對(duì)象來(lái)處理(調(diào)用相應(yīng)方法),把當(dāng)前類(Person類)的實(shí)例作為參數(shù)傳遞給PersonWriter對(duì)象(使用$this偽變量)。
因此,如果這樣調(diào)用Person類:
$person = new Person(new PersonWriter()); $person->writeName();
__call()
方法會(huì)被調(diào)用。然后會(huì)在PersonWriter對(duì)象中查找writeName()
方法,并調(diào)用之。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- php面向?qū)ο蟮姆椒ㄖ剌d兩種版本比較
- php繼承中方法重載(覆蓋)的應(yīng)用場(chǎng)合
- PHP使用方法重載實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建屬性的get和set方法
- PHP利用func_get_args和func_num_args函數(shù)實(shí)現(xiàn)函數(shù)重載實(shí)例
- php中拷貝構(gòu)造函數(shù)、賦值運(yùn)算符重載
- PHP小技巧之函數(shù)重載
- PHP實(shí)現(xiàn)重載的常用方法實(shí)例詳解
- PHP面相對(duì)象中的重載與重寫(xiě)
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)重載(overloading)操作詳解
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)模擬一般面向?qū)ο笳Z(yǔ)言中的方法重載(overload)示例
- php魔術(shù)函數(shù)__call()用法實(shí)例分析
- php 使用 __call實(shí)現(xiàn)重載功能示例
相關(guān)文章
PHP實(shí)現(xiàn)SQL語(yǔ)句格式化功能的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)SQL語(yǔ)句格式化功能的方法,基于github上開(kāi)源代碼實(shí)現(xiàn)的SQL語(yǔ)句格式化功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2017-07-07PHP二維數(shù)組排序簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了PHP二維數(shù)組排序簡(jiǎn)單實(shí)現(xiàn)方法,涉及PHP針對(duì)數(shù)組的遍歷與排序操作常用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-02-02如何通過(guò)Apache在本地配置多個(gè)虛擬主機(jī)
這篇文章主要介紹了如何通過(guò)Apache在本地配置多個(gè)虛擬主機(jī),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07php獲取從百度、谷歌等搜索引擎進(jìn)入網(wǎng)站關(guān)鍵詞的方法
這篇文章主要介紹了php獲取從百度、谷歌等搜索引擎進(jìn)入網(wǎng)站關(guān)鍵詞的方法,可實(shí)現(xiàn)判斷進(jìn)入網(wǎng)站的搜索引擎來(lái)源及搜索的關(guān)鍵詞功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-07-07實(shí)現(xiàn)了一個(gè)PHP5的getter/setter基類的代碼
實(shí)現(xiàn)了一個(gè)PHP5的getter/setter基類的代碼...2007-02-02PHP之a(chǎn)utoload運(yùn)行機(jī)制實(shí)例分析
這篇文章主要介紹了PHP的autoload運(yùn)行機(jī)制分析,從PHP源碼及應(yīng)用的角度對(duì)autoload進(jìn)行了較為深入的分析,需要的朋友可以參考下2014-08-08PHP調(diào)用MySQL的存儲(chǔ)過(guò)程的實(shí)現(xiàn)代碼
MySQL好像從5.0開(kāi)始才引入存儲(chǔ)過(guò)程,反正以前做應(yīng)用的時(shí)候從沒(méi)碰過(guò),不過(guò)現(xiàn)在因?yàn)橹饕鲀?nèi)部系統(tǒng)2008-08-08