PHP ReflectionClass 动态代理
原创
©著作权归作者所有:来自51CTO博客作者wx5c1a7aa4164f2的原创作品,请联系作者获取转载授权,否则将追究法律责任
<?php
class mysql
{
function connect($db)
{
echo "连接mysql数据库${db[0]} \r\n";
}
}
class oracle
{
function connect($db)
{
echo "连接oracle数据库${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);//调用对象的反射方法
}
}
}
}
}
$mysql = new sqlproxy('mysql');
$mysql->connect('member');
$oracle = new sqlproxy('oracle');
$oracle->connect('member');