php – ReflectionClass 反射類別,讀取指定類別的資料
要讀取某個class內有哪些方法(method)或是屬性的時候,我們可以透過這支 ReflectionClass 類別來做到;雖然在 function 的 get_class_methods() 也可以取得方法列表,但是對於方法的屬性是public protected private 我們是無法得知的。如果只是想知道類別有哪些方法,用 get_class_methods() 就好。
1 2 3 |
$relflection = new ReflectionClass('Layout'); //輸入你要查找的類別名稱,如我要查找 Layout 類別 |
若要列出 public 的方法
1 2 3 |
print_r($relflection->getMethods(ReflectionMethod::IS_PUBLIC)); |
可透過參數來過濾,ReflectionMethod::IS_PUBLIC 即可。其他選用的參數可參考官網介紹的類別:ReflectionMethod
可以使用這些來篩選
1 2 3 4 5 6 7 8 |
const integer IS_STATIC = 1 ; const integer IS_PUBLIC = 256 ; const integer IS_PROTECTED = 512 ; const integer IS_PRIVATE = 1024 ; const integer IS_ABSTRACT = 2 ; const integer IS_FINAL = 4 ; |
所以,使用 IS_PUBLIC 會列出如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
[0] => ReflectionMethod Object ( [name] => __construct //建構函數也會顯示 [class] => Layout //屬於哪個類別 ) [1] => ReflectionMethod Object ( [name] => project [class] => Layout ) [2] => ReflectionMethod Object ( [name] => index [class] => Layout ) [3] => ReflectionMethod Object ( [name] => contact [class] => Layout ) [4] => ReflectionMethod Object ( [name] => news [class] => Layout ) [5] => ReflectionMethod Object ( [name] => get_instance //像這個方法是屬於 CI_Controller [class] => CI_Controller // 為什麼不是 Layout 呢?這是因為我的 Layout 繼承 CI_Controller 類別,所以父類別的 public 也會顯示喔 ) |