1. 程式人生 > >php用反射API實現了簡單的動態代理

php用反射API實現了簡單的動態代理

<?php
/*2014-03-26
*根據反射API實現了簡單的動態代理,真正操作類是mysql類。但是通過sqlprozy類實現了根據動態傳入引數,代替實際的執行的類。在具體運行當中需要根據實際情況來使用,不要濫用反射,反射的消耗也比較大。
平時一般情況下有兩個方面用到1:對物件進行除錯2:獲取類的資訊。
*/
class mysql{
	function connect($db){
		echo "連線到資料庫",$db[0],"\r\n";
	}
}
class sqlproxy{
	private $target;
	function __construct($tar){
		$this->target[] = new $tar();
	}
	function __call($name,$args){
		foreach($this->target as $obj){
			$r = new ReflectionClass($obj);
			if($method=$r->getMethod($name)){
				if($method->ispublic() && !$method->isAbstract()){
						
						$method->invoke($obj,$args);
				}
			}
		}
	}

}
$obj = new sqlproxy('mysql');
$obj->connect('member');
?>