PHP反射机制用法实例


Posted in PHP onAugust 28, 2014

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
php编写一个简单的路由类
Apr 13 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
Aug 31 PHP
PHP curl 获取响应的状态码的方法
Jan 13 PHP
php 发送带附件邮件示例
Jan 23 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
php为字符串前后添加指定数量字符的方法
May 04 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 PHP
Laravel中如何增加自定义全局函数详解
May 09 PHP
PHP 加密 Password Hashing API基础知识点
Mar 02 PHP
thinkphp 获取控制器及控制器方法
Apr 16 PHP
php去除deprecated的实例方法
Nov 17 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 #PHP
PHP对象递归引用造成内存泄漏分析
Aug 28 #PHP
PHP中cookie和session的区别实例分析
Aug 28 #PHP
PHP实现视频文件上传完整实例
Aug 28 #PHP
PHP获取表单所有复选框的值的方法
Aug 28 #PHP
PHP中echo和print的区别
Aug 28 #PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 #PHP
You might like
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
2011/12/05 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
jquery插件珍藏(图片局部放大/信息提示框)
2013/01/08 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
分享Bootstrap简单表格、表单、登录页面
2017/08/04 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
Python实战小程序利用matplotlib模块画图代码分享
2017/12/09 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
django最快程序开发流程详解
2019/07/19 Python
python def 定义函数,调用函数方式
2020/06/02 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
python简单实现插入排序实例代码
2020/12/16 Python
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
师范生实习自我鉴定
2013/11/01 职场文书
医药个人求职信范文
2014/01/29 职场文书
大专会计自我鉴定
2014/02/06 职场文书
大学生党员自我批评
2014/02/14 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
采购意向书范本
2014/03/31 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
单位考核聘任报告
2015/03/02 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL
python中urllib包的网络请求教程
2022/04/19 Python