我認為更準確的解釋是這樣的
Reflection 類別的設計是用於反映應用程式的原始碼,而不是任何執行時期資訊。
我認為您在上面的範例中誤解了 ReflectionProperty 建構函式。它接受物件作為參數的事實只是一個便利的功能 - 您實際上是在檢查該物件的類別,而不是物件本身,所以它基本上等同於
<?php
// 運作正常
$Reflection = new ReflectionProperty(get_class($a), 'a');
// 拋出例外
$Reflection = new ReflectionProperty(get_class($a), 'foo');
?>
由於檢查已定義的屬性是這個類別的目的,因此傳入物件的類別是被隱含的。
在你的例子中,$a->foo 是一個動態成員 - 它並未定義為類別的成員,所以沒有定義類別的參考、行號、預設值等等 - 這意味著沒有任何東西可以反映。
顯然地,這個非常有用的函式庫需要一些真正的文件...