可能重复:
PHP:反射API-伟大的添加到PHP很少使用
查找文档是一个问题,但文档的质量是另一个同样重要的问题。大多数开发人员都知道精确注释代码的价值,但当我正在编写代码时,代码的含义总是非常清楚,因此注释显得多余。此外,缺少内部文档总是有一个最终的借口——我想保持较小的文件大小以减少下载时间。
内部文档通常是这种情况,但外部文档的效果并不好。边写边写是没有意义的,因为事情总是会改变,但是,当我完成编码时,文档是我脑海中最遥远的东西。
然而:我在谷歌上搜索了一下,发现了一个名为反射类的解决方案。有人能简要描述一下吗?
摘自《面向对象的PHP:概念、技术和代码》一书通过彼得·拉文:
创建这组类的明确目的是内省其他类。这些类通过检索元数据可以检查其他类的属性关于阶级;您甚至可以使用它们来检查反射类本身。
反射提供了关于类或接口的修饰符的信息——例如,该类是最终类还是静态类。
它还可以显示类的所有方法和数据成员,以及应用于它们的所有修饰符。
传递给方法的参数也可以进行内省,并公开变量的名称。通过反射,可以自动化内置类或用户定义类的文档类。
事实证明,关于类的信息的中央存储库一直就在我们面前。PHP可以通过反射类的镜像告诉我们所有关于它自己的信息。
类的反射组或应用程序编程接口(API(由许多不同的类和一个组成
界面,如图所示:
class Reflection
interface Reflector
class ReflectionException extends Exception
class ReflectionFunction implements Reflector
class ReflectionParameter implements Reflector
class ReflectionMethod extends ReflectionFunction
class ReflectionClass implements Reflector
class ReflectionObject extends ReflectionClass
class ReflectionProperty implements Reflector
class ReflectionExtension implements Reflector
看看这个列表,实际上并没有所有反射类都通用的类祖先。另一方面,Reflector接口由除Reflection和ReflectionException之外的所有类共享。ReflectionMethod extendsReflectionFunction, ReflectionObject
扩展ReflectionClass
,而ReflectionException
扩展Exception。
ReflectionObject
共享ReflectionClass的所有方法;这些类之间唯一的区别是ReflectionObject采用类实例而不是类名作为参数——使用实例,您可以在不知道任何信息的情况下内省类,甚至不知道它的名称。
Reflection通常指在运行时访问类型和函数的定义。它在C#或Java等静态语言中最有用,但我想它在PHP等动态语言中也可能有用。
在PHP中,它似乎可以用于检索现有类/函数的文档。但我认为这对你写文档没有帮助。
一般解释的反射在维基百科页面上完成:
在计算机科学中,反射是计算机程序在运行时观察(进行类型内省(并修改其自身结构和行为的过程。
(节选(
PHP中的具体实现记录在Reflection(Introduction(PHP Manual:一书中
PHP5提供了一个完整的反射API,增加了反向引擎类、接口、函数、方法和扩展的能力。此外,反射API提供了检索函数、类和方法的文档注释的方法。
(节选(
反射类用于获取有关应用程序当前状态的信息。它被称为反射,因为它观察自己,并可以在运行时告诉你有关程序运行的信息。