PHP 反射 ReflectionClass,phpreflectionclass
今天遇到了這樣一個問題,如下代碼:
classA.php
classB.php
';print_r($classFuncB);?>
當我需要找出ClassB裡面的所有方法的時候結果如下:
Array( [0] => funcBa [1] => funcBb [2] => funcBc [3] => funcAa [4] => funcAb [5] => funcAc)
一共6個方法,實際上我不想要繼承了ClassA裡面的方法,我只想要ClassB的方法,怎麼辦呢?我稍微更改了如下:
$classA = new ClassA;$classB = new ClassB;$classFuncA = get_class_methods($classA);$classFuncB = get_class_methods($classB);echo '';print_r(array_diff($classFuncB,$classFuncA));
結果如下:
Array( [0] => funcBa [1] => funcBb [2] => funcBc)
少了一個方法 funcAa ,雖然funcAa是 ClassB 從 ClassA那裡繼承過來的,但是同樣ClassB也有這個方法,所以不是我想要的結果。
解決方案:
$reflection = new ReflectionClass('ClassB');print_r($reflection->getMethods());結果:
Array( [0] => ReflectionMethod Object ( [name] => funcBa [class] => ClassB ) [1] => ReflectionMethod Object ( [name] => funcBb [class] => ClassB ) [2] => ReflectionMethod Object ( [name] => funcBc [class] => ClassB ) [3] => ReflectionMethod Object ( [name] => funcAa [class] => ClassB ) [4] => ReflectionMethod Object ( [name] => funcAb [class] => ClassA ) [5] => ReflectionMethod Object ( [name] => funcAc [class] => ClassA ))
可以看到 [4]、[5] 裡面的class 對應的值是ClassA,而其他對應的值都是ClassB。通過這個可以用foreach來實現最後想要的結果:
$reflection = new ReflectionClass('ClassB');$array = '';foreach($reflection->getMethods() as $obj){if($obj->class == $reflection->getName()){//$reflection->getName() 擷取類名$array[] = $obj->name;}}echo '';print_r($array);
最後結果:
Array( [0] => funcBa [1] => funcBb [2] => funcBc [3] => funcAa)
完成,關於 ReflectionClass 更多的知識請參考手冊
php 怎把反射初始化的對象轉換成類的對象
你要確定引入了User類的類定義檔案,否則還原序列化是不會成功的。
還原序列化失敗,$user就不會是User對象的執行個體,也就不會存在方法getModelName了。
PHP 反射API的問題,急
http://www.bkjia.com/PHPjc/900990.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/900990.htmlTechArticlePHP 反射 ReflectionClass,phpreflectionclass 今天遇到了這樣一個問題,如下代碼: classA.php ?phpclass ClassA{public function funcAa(){}public function funcAb(){}...