php依赖注入和控制反转的区别(php反射学习之依赖注入示例)
类别:编程学习 浏览量:2910
时间:2022-01-25 00:57:42 php依赖注入和控制反转的区别
php反射学习之依赖注入示例本文实例讲述了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 方法。
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/ltx06/article/details/78933211
您可能感兴趣
- php性能优化的思路和步骤(FastCGI轻松搞定IIS7.5+PHP5.6.0环境)
- docker下怎么搭建一个php环境(Docker搭建php环境教程详解)
- php命名空间真的存在吗(PHP中命名空间的使用例子)
- php7内核剖析(浅析PHP7的多进程及实例源码)
- php与xml文件(PHP读取XML文件的方法实例总结DOMDocument及simplexml方法)
- php代码最可靠的加密方式(php DES加密算法实例分析)
- php技术优点和缺点(php的优点总结 php有哪些优点)
- dedecms手机独立域名(DedeCMS Wap.php 绑定域名的解决办法)
- php的流程控制语句(php基于 swoole 实现的异步处理任务功能示例)
- php 模拟登录验证码demo(PHP 模拟登陆功能实例详解)
- thinkphp5访问路径(thinkphp5修改view到根目录实例方法)
- thinkphp导入excel(Yii框架使用PHPExcel导出Excel文件的方法分析改进版)
- php运行环境的搭建方法(php集成开发环境详解)
- python核心编程内容(顶级大神Linux,Python,Go,PHP之父谁是夜猫子?用Python揭秘!)
- php cgi是什么意思(PHP7内核CGI与FastCGI详解)
- thinkphp5单例原理(Thinkphp5框架简单实现钩子Hook行为的方法示例)
- 南宋志南和尚绝句 杨柳风似庙中来(南宋志南和尚绝句)
- 今天要穿什么颜色(今天要穿什么颜色的衣服最吉利)
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9