什么是PHP中的反射类?

时间:2011-07-17 15:02:34

标签: php class reflection

  

可能重复:
  PHP: The Reflection API - Great Addition To PHP With Little Use

查找文档是一个问题,但文档质量是另一个同样重要的问题。大多数开发人员都知道准确注释代码的价值,但是当我处于编码的中间时,代码的含义似乎总是很清晰,因此注释显得多余。此外,缺少内部文档总是存在最终的借口 - 我希望保持较小的文件大小以减少下载时间。

这通常是内部文档的情况,但外部文档的表现并不好。因为事情总是在改变,所以写它是没有意义的,但是,当我完成编码时,文档是我脑海中最远的事情。

然而:我在google搜索过,我发现了一个名为反射类的解决方案。任何人都可以简单地描述一下吗?

4 个答案:

答案 0 :(得分:6)

Excerpt from the book Object-oriented PHP: concepts, techniques, and code By Peter Lavin

这组课程的创建目的是为了反省其他课程。这些课程 可以通过检索元数据来检查其他类的属性 关于课程;你甚至可以用它们来检查反射类本身。

Reflection提供有关类或接口的修饰符的信息 - 例如,该类是final还是static。

它还可以显示类的所有方法和数据成员以及应用于它们的所有修饰符。

传递给方法的参数也可以被内省并且暴露变量的名称。通过反射,可以自动化内置类或用户定义的文档 类。

事实证明,关于课程的中央信息库始终在我们面前。 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扩展ReflectionClassReflectionException扩展了例外。

ReflectionObject分享ReflectionClass的所有方法;这些类之间的唯一区别是ReflectionObject使用类实例而不是类名作为参数 - 使用实例,您可以在不知道任何内容的情况下内省类,甚至是名称。

答案 1 :(得分:1)

反射通常是指在运行时访问类型和函数的定义。它在静态语言(例如C#或Java)中最有用,但我想它在PHP等动态语言中也很有用。

在PHP中,它似乎可用于检索现有类/函数的文档。但我认为它不会帮助您编写文档。

答案 2 :(得分:0)

一般来说,反思是在Wikipedia page

上完成的
  

在计算机科学中,反射是计算机程序可以观察(进行内省)并在运行时修改自己的结构和行为的过程。

(摘录)

PHP中的具体实现记录在书Reflection (Introduction) PHP Manual

  

PHP 5附带了一个完整的反射API,它增加了对类,接口,函数,方法和扩展进行反向工程的能力。此外,反射API提供了检索函数,类和方法的文档注释的方法。

(摘录)

答案 3 :(得分:0)

反射类用于获取有关应用程序当前状态的信息。它被称为反射,因为它会查看它的自身,并且可以在运行时告诉您有关正在运行的程序的信息。