php反射学习之依赖注入示例
发布:smiling 来源: PHP粉丝网 添加日期:2021-11-25 15:58:29 浏览: 评论:0
本文实例讲述了php反射学习之依赖注入。分享给大家供大家参考,具体如下:
先看代码:
- <?php
- if (PHP_SAPI != 'cli') {
- exit('Please run it in terminal!');
- }
- if ($argc < 3) {
- exit('At least 2 arguments needed!');
- }
- $controller = ucfirst($argv[1]) . 'Controller';
- $action = 'action' . ucfirst($argv[2]);
- // 检查类是否存在
- if (!class_exists($controller)) {
- exit("Class $controller does not existed!");
- }
- // 获取类的反射
- $reflector = new ReflectionClass($controller);
- // 检查方法是否存在
- if (!$reflector->hasMethod($action)) {
- exit("Method $action does not existed!");
- }
- // 取类的构造函数
- $constructor = $reflector->getConstructor();
- // 取构造函数的参数
- $parameters = $constructor->getParameters();
- // 遍历参数
- foreach ($parameters as $key => $parameter) {
- // 获取参数声明的类
- $injector = new ReflectionClass($parameter->getClass()->name);
- // 实例化参数声明类并填入参数列表
- $parameters[$key] = $injector->newInstance();
- }
- // 使用参数列表实例 controller 类
- $instance = $reflector->newInstanceArgs($parameters);
- // 执行
- $instance->$action();
- class HelloController
- {
- private $model;
- public function __construct(TestModel $model)
- {
- $this->model = $model;
- }
- public function actionWorld()
- {
- echo $this->model->property, PHP_EOL;
- }
- }
- class TestModel
- {
- public $property = 'property';
- }
(以上代码非原创)将以上代码保存为 run.php
运行方式,在终端下执行php run.php Hello World
可以看到,我们要执行 HelloController 下的 WorldAction,
HelloController 的构造函数需要一个 TestModel类型的对象,
通过php 反射,我们实现了, TestModel 对象的自动注入,
上面的例子类似于一个请求分发的过程,是路由请求的分发的一部分,假如我们要接收一个请求 地址例如: /Hello/World
意思是要执行 HelloController 下的 WorldAction 方法。
Tags: php反射 php依赖注入
相关文章
- ·实例介绍PHP的Reflection反射机制(2021-03-28)
- ·PHP中的reflection反射机制测试例子(2021-03-29)
- ·PHP反射机制用法实例(2021-04-10)
- ·php利用反射实现插件机制的方法(2021-05-16)
- ·PHP 反射(Reflection)使用实例(2021-05-26)
- ·PHP通过反射动态加载第三方类和获得类源码的实例(2021-06-27)
- ·反射调用private方法实践(php、java)(2021-06-30)
- ·详解php中反射的应用(2021-07-14)
- ·PHP基于反射机制实现自动依赖注入的方法详解(2021-08-22)
- ·使用PHP反射机制来构造"CREATE TABLE"的sql语句(2021-11-13)
- ·PHP反射学习入门示例(2021-11-25)
- ·php反射学习之不用new方法实例化类操作示例(2021-11-25)
- ·php中依赖注入深入理解(2018-10-13)
- ·PHP依赖注入原理与用法分析(2021-10-26)
- ·PHP依赖注入原理与用法分析(2021-10-26)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)