這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)怎么在PHP中利用反射實(shí)現(xiàn)一個委托模式,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創(chuàng)新互聯(lián)公司長期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為新華企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,新華網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。動態(tài)委托的介紹:動態(tài)委托概念來自于Jakarta 字節(jié)碼工程庫 (Byte-Code Engineering Library, BCEL)。它能夠分析存在的類,并且對于接口,抽象類,甚至運(yùn)行時的具體類來說,它能夠生成以字節(jié)編碼委托類。
被委托的接口/類應(yīng)該滿足如下條件:動態(tài)委托最多只能委托一個類,但是能夠代理多個接口。這個限制來自于Java的單繼承模式。一個Java類最多只有一個父類。既然生成的委托類把被委托類作為它的父類,那么指定多個被委托類是不合理的。如果沒有指定被委托類,那么缺省的父類就是Object。
下面是PHP 反射機(jī)制實(shí)現(xiàn)動態(tài)代理的代碼:
target[] = new Fruit(); } function __call($name, $args) { foreach ($this->target as $obj) { $r = new ReflectionClass($obj); if ($method = $r->getMethod($name)) { if ($method->isPublic() && !$method->isAbstract()) { return $method->invoke($obj, $args); } } } } } $obj = new FruitDelegator(); $obj->callFruit(); // 運(yùn)行結(jié)果 // Generate an Apple ?>
可見,通過代理類FruitDelegator來代替Fruit類來實(shí)現(xiàn)他的方法。
同樣的,如下的代碼也是能夠運(yùn)行的:
target[] = $obj; } function __call($name, $args) { foreach ($this->target as $obj) { $r = new ReflectionClass($obj); if ($method = $r->getMethod($name)) { if ($method->isPublic() && !$method->isAbstract()) { return $method->invoke($obj, $args); } } } } } $obj = new ColorDelegator(); $obj->addObject(new Color()); $obj->callColor(); ?>
傳統(tǒng)方式:
在傳統(tǒng)方式下,我們需要判斷當(dāng)前操作是取款操作還是存款操作,在分別調(diào)用Bank類中的取款操作和存款操作。
委托模式:
在委托模式下,我們將不需要客戶端的判斷操作,對客戶端來說,需要什么操作,直接傳入操作類型即可,Bank類可自動判斷操作類型,返回相應(yīng)操作的操作結(jié)果。當(dāng)我們的操作類型非常多的時候,在客戶端用if else判斷無疑是很可怕的,再假如我們在很多地方都要有這塊判斷代碼,我們需要對這些地方的判斷代碼都進(jìn)行修改(加入后來添加的判斷),而采用委托模式,我們僅僅需要在新添加的地方添加相應(yīng)需要的類型即可,不需要改動其它地方的客戶端代碼(很大程度上提高了代碼的復(fù)用性)。
php的框架:1、Laravel,Laravel是一款免費(fèi)并且開源的PHP應(yīng)用框架。2、Phalcon,Phalcon是運(yùn)行速度最快的一個PHP框架。3、Symfony,Symfony是一款為Web項(xiàng)目準(zhǔn)備的PHP框架。4、Yii,Yii是一款快速、安全和專業(yè)的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的開源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能強(qiáng)大的PHP框架。
上述就是小編為大家分享的怎么在PHP中利用反射實(shí)現(xiàn)一個委托模式了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。