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支付系统(php实现的支付宝网页支付功能示例基于TP5框架)
- php框架laravel使用(laravel5环境隐藏index.php后缀apache的方法)
- php命名对照表(PHP命名空间用法实例分析)
- php目录使用教程学习(PHP FileSystem 文件系统常用api整理总结)
- php批量导出所有数据库(php快速导入大量数据的实例方法)
- php安全性问题怎么解决(实例分析10个PHP常见安全问题)
- php面向对象3大特征(PHP面向对象程序设计重载overloading操作详解)
- php逻辑技巧图解(php版本CKEditor 4和CKFinder安装及配置方法图文教程)
- phpcurl详解(解决PHP curl或file_get_contents下载图片损坏或无法打开的问题)
- php如何发邮件(PHP示例演示发送邮件给某个邮箱)
- php商城支付接口(php实现银联商务公众号+服务窗支付的示例代码)
- wordpress的静态php页面在哪(如何让PHPnow支持wordpress静态化链接的方法)
- 如何用thinkphp框架来写一个网站(php tpl模板引擎定义与使用示例)
- php根据名称规则判断文件是否存在(PHP中上传文件打印错误错误类型分析)
- php 记录的已读状态(PHP使用观察者模式处理异常信息的方法详解)
- php字符串教程学习(php学习笔记之字符串常见操作总结)
- 前《iLOOK》时装总监 《快乐大本营》御用造型师上线(快乐大本营御用造型师上线)
- 释小龙晒杀青照片 多重身份惹观众期待(释小龙晒杀青照片)
- 《九牛之人降魔传》开机 演员祁高坤化身九牛之人除魔卫道(九牛之人降魔传开机)
- 王铲铲的致富之路无限金币卡法攻略教学(王铲铲的致富之路无限金币卡法攻略教学)
- 文明6金币太少怎么办 文明6无限刷钱教程(文明6金币太少怎么办)
- 开国中将,王牌军63军首任政委,两个连襟一个上将一个少将传为佳话(王牌军63军首任政委)
热门推荐
- php7.4 废弃功能(浅析PHP7 的垃圾回收机制)
- word-break、word-wrap、white-space的用法
- sql数值函数大全(sql中mod函数取余数的用法)
- nginx更改html内容(apache与iis下让html格式的页面也同样具有shtml的动态解析)
- css43个基本技巧(必须掌握10个非常不错的CSS技巧)
- python实现将txt转化为excel(python实现Excel文件转换为TXT文件)
- css鼠标移动特效(在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果实例代码)
- 网络虚拟机系统安装教程(NPOINT免费虚拟主机管理系统windows2003的安装方法)
- Sql Server事件探查器的作用
- python的模块与包与库(Python 中包/模块的 `import` 操作代码)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9