PHP反射機制實現動態代理的代碼

演示用代碼如下所示:

<?php

class ClassOne {

function callClassOne() {

print "In Class One";

}

}

class ClassOneDelegator {

private $targets;

function __construct() {

$this->target[] = new ClassOne();

}

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 ClassOneDelegator();

$obj->callClassOne();

?>

輸出結果:

In Class One

可見,通過代理類ClassOneDelegator來代替ClassOne類來實現他的方法。

同樣的,如下的代碼也是能夠運行的:

<?php

class ClassOne {

function callClassOne() {

print "In Class One";

}

}

class ClassOneDelegator {

private $targets;

function addObject($obj) {

$this->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 ClassOneDelegator();

$obj->addObject(new ClassOne());

$obj->callClassOne();

?>

 
利用反射機制實現XML-RPC
  動態回調基于XML的遠程過程調用摘要Java反射機制爲使用XML-RPC(XML-based Remote Procedure Call,基于XML的遠程過程調用)遠程過程調用提供了一種簡便又高效的實現方法,這種方法隱蔽掉了一些遠程過程調用過程中...查看完整版>>利用反射機制實現XML-RPC
 
利用反射機制實現XML-RPC
作者:)摘要Java反射機制爲使用XML-RPC(XML-based Remote Procedure Call,基于XML的遠程過程調用)遠程過程調用提供了一種簡便又高效的實現方法,這種方法隱蔽掉了一些遠程過程調用過程中的複雜操作。在這篇文章裏,...查看完整版>>利用反射機制實現XML-RPC
 
AJAX入門之使用for實現反射機制
  什麽是反射機制  反射機制指的是程序在運行時能夠獲取自身的信息。例如一個對象能夠在運行時知道自己有哪些方法和屬性。  在JavaScript中利用for(…in…)語句實現反射  在JavaScript中有一個很方便的語法來...查看完整版>>AJAX入門之使用for實現反射機制
 
利用反射實現類的動態加載(程序改正)
原有的上程序未能通過,本文增加之,謝謝原作者:最近在成都寫一個移動增值項目,俺負責後台server端。功能很簡單,手機用戶通過GPRS打開Socket與服務器連接,我則根據用戶傳過來的數據做出響應。做過類似項目的兄弟一定...查看完整版>>利用反射實現類的動態加載(程序改正)
 
利用反射實現類的動態加載
利用反射實現類的動態加載Bromon原創 請尊重版權最近在成都寫一個移動增值項目,俺負責後台server端。功能很簡單,手機用戶通過GPRS打開Socket與服務器連接,我則根據用戶傳過來的數據做出響應。做過類似項目的兄弟一...查看完整版>>利用反射實現類的動態加載