PHP反射机制及实例

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注