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 什么是PEAR?(第二篇)
Mar 19 PHP
php select,radio和checkbox默认选择的实现方法
May 15 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
php生成圆角图片的方法
Apr 07 PHP
php从数据库查询结果生成树形列表的方法
Apr 17 PHP
thinkPHP基于ajax实现的菜单与分页示例
Jul 12 PHP
php插件Xajax使用方法详解
Aug 31 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 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
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
php使用session二维数组实例
2014/11/06 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
Javascript 中介者模式实例
2009/12/16 Javascript
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
第六章之辅组类与响应式工具
2016/04/25 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
zTree节点文字过多的处理方法
2017/11/24 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
分析Python读取文件时的路径问题
2018/02/11 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
Pandas删除数据的几种情况(小结)
2019/06/21 Python
python爬虫实现获取下一页代码
2020/03/13 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
个人近期表现材料
2014/02/11 职场文书
贷款担保书范文
2014/05/13 职场文书
企业人事任命书
2014/06/05 职场文书
保安辞职信范文
2015/02/28 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
告知书格式
2015/07/01 职场文书