王志广的个人分享

PHP反射

admin发表于2014-08-14  4,793次浏览 标签: 

PHP5具有完整的反射API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。

面向对象的编程中对象被赋予了自省的能力,而这个自省的过程就是反射。通过使用反射api就能够实现动态的获 取一个类所有属性和方法以及调用该方法和属性。通俗的说就是当你的程序在php运行时运行的时候, 你的程序想知道你现在运行的php代码的一些信息。 比如说我想动态调用一个类的方法,或者我想知道我的一个类到底有哪些方法,有哪些属性,这就叫做反射。

举例:
有时候你想知道类的方法的是private还是public,只能靠反射了
你想知道某个函数的注释是什么,只能靠反射了
简单的说就是能让你进入类,对象,函数等语言元素的内部

我们常用的反射类主要有
ReflectionClass::getDocComment — 获取文档注释
ReflectionClass::hasMethod — 检查方法是否已定义
ReflectionClass::isInstantiable — 检查类是否可实例化
ReflectionClass::isSubclassOf — 检查是否为一个子类
ReflectionClass::isUserDefined — 检查是否由用户定义的
ReflectionClass::newInstanceWithoutConstructor — 创建一个新的类实例而不调用它的构造函数

ReflectionFunctionAbstract::getDocComment — 获取注释内容
ReflectionFunctionAbstract::getExtension — 获取扩展信息
ReflectionFunctionAbstract::getName — 获取函数名称
ReflectionFunctionAbstract::getFileName — 获取文件名称
ReflectionFunctionAbstract::isDeprecated — 检查是否已经弃用

使用:
//这是你定义的一个类
class TestClass { }
//先加载类
$rc = new ReflectionClass(‘TestClass’);
//输出类的注释
var_dump($rc->getDocComment())

你可以发表评论引用到你的网站或博客,或通过RSS 2.0订阅这个日志的所有评论。
上一篇:
下一篇:
已有2条评论
导热硅脂
2014 年 8 月 29 日

面向对象的编程中对象被赋予了自省的能力,而这个自省的过程就是反射。觉得这个定义说的很妙,自省就是反射。说得很好。

儿童游乐场设备
2014 年 10 月 20 日

支持

我来说两句

  Ctrl+Enter