PHP:反射API-对PHP的极好补充,但很少使用

PHP:反射API-对PHP的极好补充,但很少使用,php,oop,documentation,Php,Oop,Documentation,反射API是操作OOP的好东西,看起来大多数开发人员都没有意识到或者从未使用过 反射API声明: PHP5附带了一个完整的反射 添加以下功能的API 逆向工程类、接口、, 函数、方法和扩展。 此外,反射API 提供检索文档注释的方法 用于函数、类和方法 问题: 为什么它的大多数方法/属性几乎没有文档?您可以在文档中看到此消息: 此功能当前不可用 文件化;只有它的参数列表是 可用 在哪里可以找到它的文档 它将来是否兼容,换句话说,我可以在我的MVC框架中使用它吗 为什么不经常使用,有什么问题

反射API是操作OOP的好东西,看起来大多数开发人员都没有意识到或者从未使用过

反射API声明:

PHP5附带了一个完整的反射 添加以下功能的API 逆向工程类、接口、, 函数、方法和扩展。 此外,反射API 提供检索文档注释的方法 用于函数、类和方法

问题:

  • 为什么它的大多数方法/属性几乎没有文档?您可以在文档中看到此消息:
此功能当前不可用 文件化;只有它的参数列表是 可用

在哪里可以找到它的文档

  • 它将来是否兼容,换句话说,我可以在我的MVC框架中使用它吗
  • 为什么不经常使用,有什么问题吗

    • 反射肯定会一直存在。您可以使用它,但请记住,对于简单的用例来说,它是缓慢和过度的。使用中的函数之一通常是更快的选择

      在解析类的DocBlock中的注释时,反射非常有用。例如,PHPUnt使用注解@测试来告诉PHPUnE TESTROUNER,它应该考虑一个方法一个测试。@covers注释将帮助它收集代码覆盖率数据。FLOW3框架利用了

      不幸的是,PHP>5.3中的一些较新添加内容还没有被详细记录。同样的事情。但这并不意味着你不能使用它。反射API非常有表现力,很容易从方法名中看出。谷歌经常有关于如何使用某些扩展的博客文章。对于反射API,请查看:

      和SPL


      我最近发现了一些很酷的东西。从5.1.2开始,您也可以:

      $php--rf strottime
      函数[函数时间]{
      -参数[2]{
      参数#0[$time]
      参数#1[$now]
      }
      }
      
      @sarfraz我听到很多针对其性能的批评。不太清楚他们有多充分的理由,但很明显,这是缓慢的此外,在过去的文档生成过程中,没有多少好的例子可以很好地使用它。我认为人们一般不知道用它能做什么我很想看到任何真实世界的例子,可以说,它是在盒子外使用的。如果您能在问题中添加这些内容,那就太好了。@anomareh:谢谢您的评论和性能要点。我知道的一个场景是,当您使用带有引用参数的
      call\u user\u func\u array
      时,它会抛出一个错误,但是有一些方法可以使用反射api来处理这个问题。谢谢,有没有关于它在幕后是如何工作的信息?我知道它不是超快的,这是可以理解的。但这是因为它一直在解析代码还是使用了更智能的东西,比如当类加载到内存中时,它被分解成更小的块,这些信息被用来“反映”实际的类?@IanBytchek你可以查看源代码,我可以,我做了,我的C技能比猴子的略高,我想知道你是否已经有了答案。如果不做艰苦的工作就知道这一点会很有趣——这不是通常的方法,我保证:)@IanBytchek事实上,一只猴子会在C上打败我,所以我恐怕没有答案。但是你可以加入PHP工作室,那里有很多知识渊博的人,他们可能会回答你的问题。
      $php --rf strtotime
      Function [ <internal:date> function strtotime ] {
      
        - Parameters [2] {
          Parameter #0 [ <required> $time ]
          Parameter #1 [ <optional> $now ]
        }
      }