博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php反射类 ReflectionClass
阅读量:1983 次
发布时间:2019-04-27

本文共 1277 字,大约阅读时间需要 4 分钟。

什么是php反射类,顾名思义,可以理解为一个类的映射。
举个例子:
class fuc {        //定义一个类
static function ec() {
echo 
'我是一个类';
}
}
$class=new ReflectionClass('fuc');    //建立 fuc这个类的反射类

echo $class; //输出这反射类

Class [ class A ] { @@ F:\phpweb\myPHP\test.php 23-30 - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [0] { } - Methods [1] { Method [ public method __construct ] { @@ F:\phpweb\myPHP\test.php 26 - 29 } } }

$fuc=$class->newInstance();  
//相当于实例化 fuc 类
$fuc->ec(); 
//执行 fuc 里的方法ec
/*最后输出:我是一个类*/
其中还有一些更高级的用法
$ec=$class->getmethod(
'ec');  
//获取fuc 类中的ec方法
$fuc=$class->newInstance();  
//实例化
$ec->invoke($fuc);      
//执行ec 方法

上面的过程很熟悉吧。其实和调用对象的方法类似
只不过这里是反着来的,方法在前,对象在后

 

举例

try{//如果存在控制器名字的类if(class_exists($this->getController())) {//利用反射api构造一个控制器类对应的反射类$rc = new ReflectionClass($this->getController());//如果该类实现 了IController接口if($rc->implementsInterface('IController')) {//该类拥有解析后的action字符串所指向的方法名if($rc->hasMethod($this->getAction())) {//构造一个控制器类的实例$controller = $rc->newInstance();//获取该类$action参数所指向的方法对象$method = $rc->getMethod($this->getAction());//反射类方法对象的调用方式:$method->invoke($controller);} else {//以下为可能抛出异常throw new Exception("Action");}} else {throw new Exception("Interface");}} else {throw new Exception("Controller");}    }catch(exception $e)    {        echo $e;    }

 

转载地址:http://rrwvf.baihongyu.com/

你可能感兴趣的文章
第30期:索引设计(全文索引中文处理)
查看>>
第40问:对进行中的 DDL 进行 kill , 到底多久能响应
查看>>
第41问:组提交是怎样提高性能的
查看>>
彻底讲懂Spring singletonBean循环依赖与三级缓存
查看>>
CSDN文章复制
查看>>
【强烈推荐】Java设计模式:怒肝代理模式,可真把我榨干了!
查看>>
双十一最完整记录!阿里、京东全部都有
查看>>
为什么说,随波逐流是成为一个数据科学英雄最大的阻碍
查看>>
如何度过人生艰难:魔都28岁硬核知识型美少女自救指南
查看>>
淘宝总裁蒋凡:今年双11淘宝推荐流量超过了搜索流量
查看>>
为什么一些创立才2、3年的创新公司,不赚钱却可以赴美上市?
查看>>
互联网大佬都是怎么找对象的?
查看>>
大数据之下无隐私
查看>>
黄仁勋:英伟达豪赌GPU终获回报,但我更看好高性能计算
查看>>
吴恩达在Coursera开新课了! “全民AI”强势来袭
查看>>
2018中国AI人才大调查:14张图表解读他们来自何处,又将去往何方?
查看>>
Tomcat通过setenv.bat指定jdk和jre(相对路径)
查看>>
Linux下MySQL表名不区分大小写的设置方法
查看>>
nacicat连接mysql8及JDBC连接mysql8报错解决
查看>>
关于JDBC连接数据库时出现的Public Key Retrieval is not allowed错误
查看>>