PHP5 开始提供了完整的反射API。有反射类(ReflectionClass)和反射函数(ReflectionFunction)等,功能大同小异,这里主要以ReflectionClass为列说明。

什么是反射
他是指PHP在运行状态中,动态的获取类、方法、属性、参数、注释等信息和动态调用对象的方法的功能。

有什么用
可以帮助我们构建复杂的,可扩的运用。比如自动加载插件,自动生成文档等

代码示例
该示例为一个通用API入口

HttpApi.php

namespace twinkle\service\http;class HttpApi
{private $class;public function __construct($class){$this->class = $class;}public function parseRequest($method,$params = []){$class = new \ReflectionClass($this->class);$instance = $class->newInstanceArgs($params);$method = $class->getMethod($method);$args = [];foreach ($method->getParameters() as $param) {$name = $param->getName();if (isset($params[$name])) {$args[$name] = $params[$name];} else {try {$args[$name] = $param->getDefaultValue();} catch (\Exception $e) {throw new RequestException('请求参数不合未能',500);}}}return [$instance,$method,$args];}
}

NotFoundService.php

namespace app\services;use app\base\Service;class NotFoundService extends Service
{public function error(){return $this->format(['status' => 1, 'msg' => '请求不合法,请确认service和method是否存在']);}
}

使用范例

$params = $_REQUEST;
$serviceName= isset($params['service']) ? $params['service'] : 'NotFound';
$methodName= isset($params['method']) ? $params['method'] : 'error';
$class = '\\app\\services\\' . Str::ucWords($serviceName) . 'Service';
list($instance, $method, $args) = (new HttpApi($class))->parseRequest($methodName, $params);
echo json_encode(($method->invokeArgs($instance, $args)));

【PHP高级特性】之反射相关推荐

  1. 【EduCoder答案】Java高级特性- Java反射

    简介 答案查询的入口网页版 并不是所有的关卡都有答案,有些只有部分关卡有 不要直接复制答案哦 Java高级特性 - Java反射 >>>查看 第1关:了解 Class 对象 解题代码 ...

  2. java中成员变量的加载时机_工作奇谈——JAVA高级特性之反射

    一.从问题入手 最近又要面试新人,所以翻了翻以前的代码,突然发现了一个有意思的问题. 问:如下一个Student类,请实例Student并对其成员变量赋值. public class Student ...

  3. java高级反射_Java高级特性之反射

    老规矩我们还是先提出几个问题,一门技术必然要能解决一定的问题,才有去学习掌握它的价值 一. 什么是反射? 二.反射能做什么? 一. 什么是反射? 用在Java身上指的是我们可以于运行时加载.探知.使用 ...

  4. 头歌Educoder——Java高级特性 - Java反射

    文章目录 第1关:了解 Class 对象 任务描述 相关知识 Class 对象 三种获取Class类型的实例的方法 三种方法获取的 Class 对象之间的区别 编程要求 测试说明 代码样例 Refle ...

  5. java 反射 new class_Java高级特性-反射:不写死在代码,还怎么 new 对象?

    反射是 Java 的一个高级特性,大量用在各种开源框架上. 在开源框架中,往往以同一套算法,来应对不同的数据结构.比如,Spring 的依赖注入,我们不用自己 new 对象了,这工作交给 Spring ...

  6. Java 高级特性 --- 反射

    From:Java 高级特性 --- 反射:https://www.jianshu.com/p/9be58ee20dee From:Java 基础之 --- 反射(非常重要):https://blog ...

  7. Java这个高级特性-泛型,很多人还没用过!

    点击关注公众号,Java干货及时送达 泛型是 Java 的高级特性之一,如果想写出优雅而高扩展性的代码,或是想读得懂一些优秀的源码,泛型是绕不开的槛.本文介绍了什么是泛型.类型擦除的概念及其实现,最后 ...

  8. Java这个高级特性,很多人还没用过!

    点击关注公众号,Java干货及时送达 泛型是 Java 的高级特性之一,如果想写出优雅而高扩展性的代码,或是想读得懂一些优秀的源码,泛型是绕不开的槛.本文介绍了什么是泛型.类型擦除的概念及其实现,最后 ...

  9. 根据children动态复杂表头excel导出_Java高级特性-注解:注解实现Excel导出功能

    注解是 Java 的一个高级特性,Spring 更是以注解为基础,发展出一套"注解驱动编程". 这听起来高大上,但毕竟是框架的事,我们也能用好注解吗? 的确,我们很少有机会自己写注 ...

  10. java数据导出ex_Java高级特性注解:注解实现Excel导出功能

    作者:JerryWu来源:SegmentFault 思否社区 注解是 Java 的一个高级特性,Spring 更是以注解为基础,发展出一套"注解驱动编程". 这听起来高大上,但毕竟 ...

最新文章

  1. Android 补间动画(Tween Animation)
  2. 测试环境搭建流程_案例解析:一个完整的项目测试方案流程,应该是怎么的?...
  3. 对geobeansEvent事件回调函数的改进
  4. pl/sql command window 初步接触
  5. ls –al命令来观察文件的权限,每个文件的权限都用10位表示,并分为四段!
  6. Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限
  7. mysql分页查询语法
  8. Tensorflow2.0安装(win10系统cpu版本)
  9. [APIO2015]巴厘岛的雕塑[按位贪心+dp]
  10. 使用maven构建web项目
  11. [Rust]cargo run时error: linker `link.exe` not found
  12. AndroidUI 布局动画-为布局添加动画
  13. 破解Navicat for MySql
  14. 计算机网络技术自谋职业,过去认知或许都是错的 主编告诉你游戏PC该怎么选
  15. 基于JSP的图书管理系统
  16. 量子力学对计算机影响,人们对量子力学的理解有误?
  17. 第二课 Python Web企业门户网站-框架搭建
  18. 台式计算机组装攻略,台式机如何组装 电脑组装详细步骤【图文】
  19. 《文言文复兴系列 5 人之道》(江湖一剑客)
  20. Win10家庭版中文用户名改英文用户名方法(亲测管用)

热门文章

  1. openmp并行编程_OpenMP实现生产者消费者问题
  2. sql:CallableStatement执行存储过程
  3. 漫谈Java IO之 Netty与NIO服务器
  4. Docker入门(CentOS7)
  5. Bootstrap(导航条)
  6. BroadcastReceive之ip拨号
  7. 五)Spring + Quartz 复杂业务的两个问题:获取Spring上下文 和 自动注入服务类
  8. 查看ios设备型号网址
  9. Android 的 生命周期_ 界面的切换 和 吐司
  10. [长流支流]的专栏--《金质打印通》、《WebMIS.NET快速开发平台》,MIS/ERP开发利器...