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 相关文章推荐
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
分割GBK中文遭遇乱码的解决方法
Aug 09 PHP
php判断是否为json格式的方法
Mar 04 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
CI配置多数据库访问的方法
Mar 28 PHP
php时间计算相关问题小结
May 09 PHP
详解php几行代码实现CSV格式文件输出
Jul 01 PHP
PHP实现的策略模式简单示例
Aug 25 PHP
阿里云Win2016安装Apache和PHP环境图文教程
Mar 11 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
Jun 13 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程序之die调试法 快速解决错误
2009/09/17 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
php ios推送(代码)
2013/07/01 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
PHP实现懒加载的方法
2015/03/07 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
javascript 处理HTML元素必须避免使用的一种方法
2009/07/30 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
JS实现页面打印(整体、局部)
2017/08/18 Javascript
ng-alain表单使用方式详解
2018/07/10 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
js计算最大公约数和最小公倍数代码实例
2019/09/11 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
实例讲解Python爬取网页数据
2018/07/08 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
用python实现一个简单的验证码
2020/12/09 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
Columbia Sportswear法国官网:全球户外品牌
2020/09/25 全球购物
马智宇结婚主持词
2014/04/01 职场文书
技术合作协议书范本
2014/04/18 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书