PHP 5 具有完整的反射 API,添加了對類、接口、函數、方法和擴展進行反向工程的能力。 此外,反射 API 提供了方法來取出函數、類和方法中的文檔注釋。通過使用反射API可以分析其他的類、接口、方法、屬性、函數和擴展。下面舉例展示PHP自身類 Reflection 的定義:
Reflection::export(new ReflectionClass('Reflection'));
打印結果如下:
Class [ <internal:Reflection> class Reflection ] { - Constants [0] { } - Static properties [0] { } - Static methods [2] { Method [ <internal:Reflection> static public method getModifierNames ] { - Parameters [1] { Parameter #0 [ <required> $modifiers ] } } Method [ <internal:Reflection> static public method export ] { - Parameters [2] { Parameter #0 [ <required> Reflector $reflector ] Parameter #1 [ <optional> $return ] } } } - Properties [0] { } - Methods [0] { } }
從打印結果可以看出 export 是 Reflection 類的一個public 的靜態方法,提供兩個參數,一個必須提供的 reflector類型 ,另一個是可選的,bool類型。不只是export,反射API還有很多,通過這些API我們還可以查詢類的元數據,動態的調用類的靜態方法,反射還能被用來創建自動穩定編寫系統。反射API定義了大量is和has類型的函數,它們可以用來在代碼中執行條件判斷。比如通過isUserDefined()來判斷已經加載的類中哪些是用戶定義的。
(未完待續)