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实现大文件断点续传下载实例代码)
- phpweb应用技术开发与数据库教程(IIS8 使用FastCGI配置PHP环境图文教程)
- lnmp安装php(LNMP系列教程之二 删除站点及域名绑定)
- php中isset函数有什么功能(PHP中的empty、isset、isnull的区别与使用实例)
- win7如何搭建php环境(阿里云Win2016安装Apache和PHP环境图文教程)
- php队列的用法实例(PHP实现一个限制实例化次数的类示例)
- php运行模式图解(php策略模式简单示例分析区别于工厂模式)
- thinkphp微信开发实例(ThinkPHP框架下微信支付功能总结踩坑笔记)
- php表单上传文件功能(PHP单文件上传原理及上传函数的封装操作示例)
- thinkphp5.1插件实现(Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例)
- php编程输出菱形(php输出反斜杠的实例方法)
- php商城支付接口(php实现银联商务公众号+服务窗支付的示例代码)
- phplaravel怎么优化(laravel执行php artisan migrate报错的解决方法)
- php wamp 环境搭建(wamp服务器访问php非常缓慢的解决过程)
- php内存占用分析(PHP基础之输出缓冲区基本概念、原理分析)
- php换行乱码(php输出文字乱码的解决方法)
- 朋友圈屏蔽你的人,可以直接看淡了(朋友圈屏蔽你的人)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
- 浙江省一个县,人口超40万,建县历史超1100年(浙江省一个县人口超40万)
- 五代十国南唐历代国君(五代十国南唐历代国君)
- 飞机引进工程师杨隆 匠人匠心,只争朝夕(飞机引进工程师杨隆)
- 三人行,她们是育人路上的 铁三角 团队(她们是育人路上的)
热门推荐
- 图片热点链接的设置
- CSS中 z-index 的用法
- python开启线程池(对python:threading.Thread类的使用方法详解)
- dedecms悬浮导航(DEDECMS开启绝对地址PC端跳转到静态手机端实现方法)
- php系统转换的三种方式(PHP容器类的两种实现方式示例)
- vue点击事件动态禁用(vue开发移动端使用better-scroll时click事件失效的解决方案)
- java入坑rabbitmq(Python操作rabbitMQ的示例代码)
- nginx 怎么避免options请求(详解nginx 的 default_server 定义及匹配规则)
- line-height 百分比与数值的区别
- sql server性能调优(SQL Server性能调优之缓存)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9