溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在PHP中利用反射實(shí)現(xiàn)一個(gè)委托模式

發(fā)布時(shí)間:2021-05-14 17:06:19 來(lái)源:億速云 閱讀:147 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)怎么在PHP中利用反射實(shí)現(xiàn)一個(gè)委托模式,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

動(dòng)態(tài)委托的介紹:動(dòng)態(tài)委托概念來(lái)自于Jakarta 字節(jié)碼工程庫(kù) (Byte-Code Engineering Library, BCEL)。它能夠分析存在的類,并且對(duì)于接口,抽象類,甚至運(yùn)行時(shí)的具體類來(lái)說(shuō),它能夠生成以字節(jié)編碼委托類。

被委托的接口/類應(yīng)該滿足如下條件:動(dòng)態(tài)委托最多只能委托一個(gè)類,但是能夠代理多個(gè)接口。這個(gè)限制來(lái)自于Java的單繼承模式。一個(gè)Java類最多只有一個(gè)父類。既然生成的委托類把被委托類作為它的父類,那么指定多個(gè)被委托類是不合理的。如果沒(méi)有指定被委托類,那么缺省的父類就是Object。

下面是PHP 反射機(jī)制實(shí)現(xiàn)動(dòng)態(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
?>

可見(jiàn),通過(guò)代理類FruitDelegator來(lái)代替Fruit類來(lái)實(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類中的取款操作和存款操作。

委托模式:

在委托模式下,我們將不需要客戶端的判斷操作,對(duì)客戶端來(lái)說(shuō),需要什么操作,直接傳入操作類型即可,Bank類可自動(dòng)判斷操作類型,返回相應(yīng)操作的操作結(jié)果。當(dāng)我們的操作類型非常多的時(shí)候,在客戶端用if else判斷無(wú)疑是很可怕的,再假如我們?cè)诤芏嗟胤蕉家羞@塊判斷代碼,我們需要對(duì)這些地方的判斷代碼都進(jìn)行修改(加入后來(lái)添加的判斷),而采用委托模式,我們僅僅需要在新添加的地方添加相應(yīng)需要的類型即可,不需要改動(dòng)其它地方的客戶端代碼(很大程度上提高了代碼的復(fù)用性)。

php的框架有哪些

php的框架:1、Laravel,Laravel是一款免費(fèi)并且開(kāi)源的PHP應(yīng)用框架。2、Phalcon,Phalcon是運(yùn)行速度最快的一個(gè)PHP框架。3、Symfony,Symfony是一款為Web項(xiàng)目準(zhǔn)備的PHP框架。4、Yii,Yii是一款快速、安全和專業(yè)的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的開(kāi)源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能強(qiáng)大的PHP框架。

上述就是小編為大家分享的怎么在PHP中利用反射實(shí)現(xiàn)一個(gè)委托模式了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI