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分页函数代码(简单实用型)
Dec 02 PHP
php代码书写习惯优化小结
Jun 20 PHP
discuz加密解密函数使用方法和中文注释
Jan 21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 PHP
PHP实现事件机制实例分析
Jun 26 PHP
WordPress后台中实现图片上传功能的实例讲解
Jan 11 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
获取URL文件名后缀
2013/10/24 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
Python Socket编程入门教程
2014/07/11 Python
django之session与分页(实例讲解)
2017/11/13 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
2017/12/14 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
Django框架 querySet功能解析
2019/09/04 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
pytorch 求网络模型参数实例
2019/12/30 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
自荐信格式技巧有哪些呢
2013/11/19 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
入党政审材料范文
2014/12/24 职场文书
党支部先进事迹材料
2014/12/24 职场文书
教师学期末个人总结
2015/02/13 职场文书
共青团员自我评价
2015/03/10 职场文书
2019年大学推荐信
2019/06/24 职场文书