<?php
class mysql
{
public function connect($db)
{
echo "链接到数据库 ${db[0]}<br />";
}
}
class SqlProxy
{
private $target;
function __construct($tar)
{
$this->target[] = new $tar();
}
public function __call($name, $args)
{
foreach ($this->target as $obj) {
$r = new ReflectionClass($obj);
if ($method = $r->getMethod($name)) {
if ($method->isPublic() && !$method->isAbstract()) {
echo '前置操作 <br />';
$method->invoke($obj, $args);
echo '后置操作 <br />';
}
}
}
}
}
$obj = new SqlProxy('mysql');
$obj->connect('member');
// output:
// 前置操作
// 链接到数据库 member
// 后置操作
/*****************
反射用于探知类的内部结构,
可以动态改变内部的属性和方法,
实现动态的代理功能,和插件功能。
*********************/
php 反射
最新推荐文章于 2024-10-08 18:38:38 发布