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 google或baidu分页代码
Nov 26 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
PHP PDO fetch 模式各种参数的输出结果一览
Jan 07 PHP
php绘制一个矩形的方法
Jan 24 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
PHP自定义函数格式化json数据示例
Sep 14 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 PHP
PHP7 foreach() 函数修改
Mar 09 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给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
Laravel框架集成UEditor编辑器的方法图文与实例详解
2019/04/17 PHP
php7下的filesize函数
2019/09/30 PHP
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
node.js的事件机制
2017/02/08 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
python3编写C/S网络程序实例教程
2014/08/25 Python
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
python中pass语句用法实例分析
2015/04/30 Python
Python数据可视化之画图
2019/01/15 Python
python全局变量引用与修改过程解析
2020/01/07 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
留学自荐信写作方法
2014/01/27 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
青春寄语大全
2014/04/09 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
党员自我评价2015
2015/03/03 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python
python中super()函数的理解与基本使用
2021/08/30 Python