PHP 反射 ReflectionClass
今天遇到了这样一个问题,如下代码:
classA.php
<?php
class ClassA{
public function funcAa(){
}
public function funcAb(){
}
public function funcAc(){
}
}
?>
classB.php
<?php
include './classA.php';
class ClassB extends ClassA{
public function funcBa(){
}
public function funcBb(){
}
public function funcBc(){
}
public function funcAa(){
parent::funcAa();
}
}
$classB = new ClassB;
$classFuncB = get_class_methods($classB);
echo '<pre>';
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 '<pre>'; 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 '<pre>';
print_r($array);
最后结果:
Array
(
[0] => funcBa
[1] => funcBb
[2] => funcBc
[3] => funcAa
)
完成,关于 ReflectionClass 更多的知识请参考手册
PHP 反射 ReflectionClass的更多相关文章
- PHP反射ReflectionClass、ReflectionMethod 入门教程
PHP反射ReflectionClass.ReflectionMethod 入门教程 作者:SNSGOU 发布于:2014-03-16 16:44:00 分类:PHP 浏览(6145) PHP5 ...
- PHP反射ReflectionClass、ReflectionMethod 学习笔记 (一)
PHP5 具有完整的反射API,添加对类.接口.函数.方法和扩展进行反向工程的能力. 反射是什么? 它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类.方法.属性.参数等的详细信息,包括 ...
- php -- 反射ReflectionClass
反射类:ReflectionClass 反射就是将其他类的结构给反应出来,从而可以对类的结构进行了解便于对类的使用. ReflectionClass::export(类名); 返回结果为三个数组:常量 ...
- PHP反射(ReflectionClass、ReflectionMethod)在ThinkPHP框架的控制器调度模块中的应用
ThinkPHP框架的控制器模块是如何实现 前控制器.后控制器,及如何执行带参数的方法? PHP系统自带的 ReflectionClass.ReflectionMethod 类,可以反射用户自定义类的 ...
- PHP面向对象的一些深入理解
1.$this就是这个对象的地址,$this不能在类外部使用.2.构造函数 __construct 和析构函数都没有返回值:一旦一个对象成为垃圾对象(没有任何变量引用的对象,或者=null),析构函数 ...
- php初进一个项目组,使用几个函数帮忙熟悉流程
初进一个项目组的时候,可能对他的框架啊神马不熟悉的.有时候类里又有各种魔术方法的使用,IDE还跳转不过去对象的方法.这时候很多php内置函数就可以帮上些忙了. 1. instanceof 2. get ...
- Laravel源码解析 — 服务容器
前言 本文对将系统的对 Laravel 框架知识点进行总结,如果错误的还望指出 阅读书籍 <Laravel框架关键技术解析> 陈昊 学习课程 Laravel5.4快速开发简书网站 轩脉刃 ...
- PHP的反射类ReflectionClass、ReflectionMethod使用实例
PHP5 具有完整的反射API,添加对类.接口.函数.方法和扩展进行反向工程的能力. 反射是什么? 它是指在PHP运行状态中,扩展分析PHP程序,导出或提取出关于类.方法.属性.参数等的详细信息,包括 ...
- (转载)php反射类 ReflectionClass
(转载)http://hi.baidu.com/daihui98/item/a67dfb8213055dd75f0ec165 php反射类 ReflectionClass 什么是php反射类,可以 ...
随机推荐
- apue.h
[root@localhost unix_env_advance_prog]# cat apue.h #ifndef _APUE_H #define _APUE_H #define _XOPEN_SO ...
- MySQL_前缀索引_建立
-- 查看出现频率select count(*) as cnt,cityfrom sakila.city_demo group by city order by cnt desc limit 10; ...
- Jfinal学习笔记
实习期间,公司使用jfinal做开发,所以就学习了这个框架 Jfinal作为一个极速ORM,使用上非常方便,核心源代码1万多行,压缩后只有200多KB. 从入口开始 作为一个web项目,首先解读web ...
- struts2 后台action向前端JSP传递参数的问题
后台有个方法,里面部分代码如下: System.out.print("alter:"+user.getId()); User temp=userservice.getUserByU ...
- ThreadPoolExecutor运转机制详解
ThreadPoolExecutor运转机制详解 - 走向架构师之路 - 博客频道 - CSDN.NET 最近发现几起对ThreadPoolExecutor的误用,其中包括自己,发现都是因为没有仔细看 ...
- python基础语法小笔记
这几天看着python,然后就记下一些自己觉得需要注意以下的基础语法吧! 如下: for i in range(0,100)表示从0到99,不包括后边界 单引号(')和双引号("" ...
- 开始学习css
今天开始学习css:应用一本<HTML5与CSS3网页设计基础> 先学习css样式规则声明. Body{ color:blue} 对应:选择符:{声明属性:声明值}: Background ...
- less-2
样式内嵌: 生成css: 样式运算: 生成的css文件:
- ActiveMQ(5.10.0) - Wildcards and composite destinations
In this section we’ll look at two useful features of ActiveMQ: subscribing to multiple destinations ...
- Django学习--9 多对一关系模型
保持前面的不变只是增加了一些 1.vim sdj/models.py class Blog(models.Model): name = models.CharField(max_leng ...