PHP 反射 ReflectionClass,phpreflectionclass_PHP教程
程序员文章站
2022-05-18 13:11:28
...
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 更多的知识请参考手册
你要确定引入了User类的类定义文件,否则反序列化是不会成功的。
反序列化失败,$user就不会是User对象的实例,也就不会存在方法getModelName了。
推荐阅读
-
使用PHP的反射Reflection获取对象信息_PHP教程
-
反射调用private方法实践(php、java),_PHP教程
-
PHP 反射机制实现动态代理的代码_PHP教程
-
用反射来生成SQL的CREATE语句_PHP教程
-
php反射类ReflectionClass用法分析_PHP
-
php利用反射实现插件机制的方法,php反射插件机制_PHP教程
-
php反射类ReflectionClass用法分析,reflectionclass用法
-
php反射类ReflectionClass用法分析,reflectionclass用法_PHP教程
-
PHP的反射类ReflectionClass、ReflectionMethod使用实例
-
php反射类ReflectionClass用法分析