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实现小型站点广告管理
Oct 09 PHP
smtp邮件发送一例
Oct 09 PHP
让你同时上传 1000 个文件 (一)
Oct 09 PHP
PHP Google的translate API代码
Dec 10 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
用PHP和Shell写Hadoop的MapReduce程序
Apr 15 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 PHP
Joomla语言翻译类Jtext用法分析
May 05 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 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 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
jquery 表单进行客户端验证demo
2009/08/24 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
js 两数组去除重复数值的实例
2017/12/06 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
python 自定义对象的打印方法
2019/01/12 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
Python类成员继承重写的实现
2020/09/16 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
医学类导师推荐信范文
2013/11/19 职场文书
员工年终演讲稿
2014/01/03 职场文书
英语教师求职信
2014/06/16 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
小班下学期个人总结
2015/02/12 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书