我认为更准确的解释是:
反射类旨在反映应用程序的源代码,而不是任何运行时信息。
我认为您误解了上面示例中的 ReflectionProperty 构造函数。它接受对象作为参数只是为了方便 - 您实际上是在检查该对象的类,而不是对象本身,所以它基本上等同于:
<?php
// 正常工作
$Reflection = new ReflectionProperty(get_class($a), 'a');
// 抛出异常
$Reflection = new ReflectionProperty(get_class($a), 'foo');
?>
获取您传入的对象的类是隐含的,因为检查定义的属性是此类的目的。
在您的示例中,$a->foo 是一个动态成员 - 它没有定义为类的成员,因此没有定义的类引用、行号、默认值等 - 这意味着,没有任何内容可以反映。
显然,这个非常有用的库可以使用一些真正的文档...