ホームページ > php教程 > php手册 > リフレクション メカニズムを使用して PHP で動的プロキシを実装する

リフレクション メカニズムを使用して PHP で動的プロキシを実装する

WBOY
リリース: 2016-06-21 08:57:09
オリジナル
1438 人が閲覧しました

デモコードは次のとおりです

classClassOne{
functioncallClassOne(){
print"InClassOne";
}
}
classClassOneDelegator{
プライベート$ターゲット;
function__construct(){
$this->target[]=newClassOne();
}
function__call($name,$args){
foreach($this->targetas$obj){
$r=newReflectionClass($obj);
if($method=$r->getMethod($name)){
if($method->isPublic()&&!$method->isAbstract()){
Return$method->invoke($obj,$args);
}
}
}
}
}
$obj=newClassOneDelegator();
$obj->callClassOne();
?>

出力結果:

クラス1で

ClassOne クラスの代わりにプロキシ クラス ClassOneDelegator がメソッドの実装に使用されていることがわかります。

同様に、次のコードも実行できます:

classClassOne{
functioncallClassOne(){
print"InClassOne";
}
}
classClassOneDelegator{
プライベート$ターゲット;
functionaddObject($obj){
$this->target[]=$obj;
}
function__call($name,$args){
foreach($this->targetas$obj){
$r=newReflectionClass($obj);
if($method=$r->getMethod($name)){
if($method->isPublic()&&!$method->isAbstract()){
Return$method->invoke($obj,$args);
}
}
}
}
}
$obj=newClassOneDelegator();
$obj->addObject(newClassOne());
$obj->callClassOne();
?>



関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート