>  기사  >  백엔드 개발  >  PHP反射机制用法实例,php反射实例_PHP教程

PHP反射机制用法实例,php反射实例_PHP教程

WBOY
WBOY원래의
2016-07-13 10:19:57839검색

PHP反射机制用法实例,php反射实例

本文实例讲述了PHP反射机制的用法,分享给大家供大家参考之用。具体方法如下:

演示示例代码如下所示:

<&#63;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();
&#63;>

输出结果:

In Class One

可见,通过代理类ClassOneDelegator来代替ClassOne类来实现他的方法。

同样的,如下的代码也是能够运行的:

<&#63;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();
&#63;>

希望本文所述对大家的PHP程序设计有所帮助。

什是PHP的反射机制

也可以叫映射。说直白点,他不仅能克隆到对象,而且可以调用对象的变量甚

至方法,挺强大的。php API5关于与对象有解释,有机会可以看下,类似于

java中的。当然,这种特性,足以证明php与asp还是有很大区别的!
 

JAVA的反射机制的原理是什 最好还可以带上个怎使用反射机制的例子

Field[] fields = object.getClass().getDeclaredFields();
for (int j = 0; j try {
Method method = object.getClass().getMethod("get" + name.substring(0, 1).toUpperCase()
+ name.substring(1), new Class[] {});
Object result = method.invoke(object, new Object[] {});
} catch (Exception e) {
e.getStackTrace();
}
}
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/871097.htmlTechArticlePHP反射机制用法实例,php反射实例 本文实例讲述了PHP反射机制的用法,分享给大家供大家参考之用。具体方法如下: 演示示例代码如下所...
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.