php中的依赖注入实例详解


Posted in PHP onAugust 14, 2019

本文实例讲述了php中的依赖注入。分享给大家供大家参考,具体如下:

依赖注入是一种允许我们从硬编码的依赖中解耦出来,从而在运行时或者编译时能够修改的软件设计模式。

我到现在依然不大明白上面“依赖注入”的定义是什么……

有兴趣可以参考下《PHP之道》上面对“依赖注入”的 解释。
http://laravel-china.github.io/php-the-right-way/#dependency_injection

简而言之就是可以让我们在类的方法中更加方便的调用与之关联的类。

假设我们有一个这样的类

class Test
{
 public function index(Demo $demo,Apple $apple){
  $demo->show();
  $apple->fun();
 }
}

如果想使用index方法我们一般需要这样做。

$demo = new Demo();
$apple = new Apple();
$obj = new Test();
$obj->index($demo,$apple);

index方法调用起来是不是很麻烦?上面的方法还只是有两个参数,如果有更多的参数,我们就要实例化更多的对象作为参数。如果我们引入的“依赖注入”,调用方式将会是像下面这个样子。

$obj = new dependencyInjection();
$obj->fun("Test","index");

我们上面的例子中,Test类的index方法依赖于Demo和Apple类。

“依赖注入”就是识别出所有方法“依赖”的类,然后作为参数值“注入”到该方法中。

dependencyInjection类就是完成这个依赖注入任务的。

<?php
/**
 * Created by PhpStorm.
 * User: zhezhao
 * Date: 2016/8/10
 * Time: 19:18
 */
class dependencyInjection
{
 function fun($className,$action){
  $reflectionMethod = new ReflectionMethod($className,$action);
  $parammeters = $reflectionMethod->getParameters();
  $params = array();
  foreach ($parammeters as $item) {
   preg_match('/> ([^ ]*)/',$item,$arr);
   $class = trim($arr[1]);
   $params[] = new $class();
  }
  $instance = new $className();
  $res = call_user_func_array([$instance,$action],$params);
  return $res;
 }
}

在mvc框架中,control有时会用到多个model。如果我们使用了依赖注入类的自动加载之后,我们就可以像下面这样使用。

public function index(UserModel $userModel,MessageModel $messageModel){
 $userList = $userModel->getAllUser();
 $messageList = $messageModel->getAllMessage();
}

灰常方便~

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 各种排序算法实现代码
Aug 20 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
Jul 03 PHP
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
Apr 02 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 PHP
Cookie跨域问题解决方案代码示例
Nov 24 PHP
php基于 swoole 实现的异步处理任务功能示例
Aug 13 #PHP
thinkphp3.2框架中where条件查询用法总结
Aug 13 #PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
Aug 13 #PHP
php实现的表单验证类完整示例
Aug 13 #PHP
thinkphp3.2同时连接两个数据库的简单方法
Aug 13 #PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 #PHP
Laravel如何同时连接多个数据库详解
Aug 13 #PHP
You might like
smarty模板引擎基础知识入门
2015/03/30 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
jQuery 表单验证扩展(四)
2010/10/20 Javascript
Jquery之美中不足小结
2011/02/16 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
jquery显示loading图片直到网页加载完成的方法
2015/06/25 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
js实现聊天对话框
2020/02/08 Javascript
Python的垃圾回收机制深入分析
2014/07/16 Python
解析Python中while true的使用
2015/10/13 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
详解django2中关于时间处理策略
2019/03/06 Python
自我评价怎么写正确呢?
2013/12/02 职场文书
教师自荐信
2013/12/10 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
元旦联欢会感言
2014/03/04 职场文书
店面销售职位的职责
2014/03/09 职场文书
销售内勤岗位职责
2014/04/15 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
小区文明倡议书
2014/05/16 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
休学证明范本
2015/06/19 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书