映射类ReflectionClass可以在运行中查询类名,函数名,变量等等很多信息,给编程带来很大灵活性,详细信息可以查看php帮助文档,
以下是使用映射执行授权模式的简单例子例子(程序已经过调试OK)。
<?php
class ClassOne {
function callClassOne() {
echo "In Class One\n";
}
}
class ClassTwo {
function callClassTwo() {
echo "In Class Two\n";
}
}
class ClassOneDelegator {
public $ targets;
function __construct() {
$this-> targets[] = new ClassOne();
}
function addObject($obj) {
$this-> targets[] = $obj;
}
foreach ($this->targets as $obj) {
$r = new ReflectionClass($obj);
if(!$r->hasMethod($name))continue;
if ($method = $r->getMethod($name)) {
if ($method->isPublic() && !$method->isAbstract()) {
return $method->invoke($obj, $args);
}
}
echo $obj . "\n";
}
}
}
$obj = new ClassOneDelegator();
$obj->addObject(new ClassTwo());
$obj->callClassOne();
$obj->callClassTwo();
?>
输出:
教材中的例子。但是经过我的修正(红色字体)后才能正常运行。