欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP反射机制用法实例

程序员文章站 2023-11-20 13:34:28
本文实例讲述了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();
?>

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