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 相关文章推荐
一个改进的UBB类
Oct 09 PHP
测试您的 PHP 水平的题目
May 30 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
php中的静态变量的基本用法
Mar 20 PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 PHP
PHP进程通信基础之信号
Feb 19 PHP
PHP实现中国公民身份证号码有效性验证示例代码
May 03 PHP
php的常量和变量实例详解
Jun 27 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
利用laravel搭建一个迷你博客实战教程
Aug 13 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 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
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
2018/06/05 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
javascript动态加载三
2012/08/22 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
JS实现字符串翻转的方法分析
2018/08/31 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
python zip文件 压缩
2008/12/24 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
使用Python实现牛顿法求极值
2020/02/10 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
乌克兰在线药房:Аптека24
2019/10/30 全球购物
大学生求职自荐信
2013/12/12 职场文书
公司员工活动策划方案
2014/08/20 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫