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
Apache设置虚拟WEB
Oct 09 PHP
php下通过IP获取地理位置的代码(小偷程序)
Jun 09 PHP
php标签云的实现代码
Oct 10 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
php+mysqli数据库连接的两种方式
Jan 28 PHP
PHP实现图片上传并压缩
Dec 22 PHP
PHP中的数组处理函数实例总结
Jan 09 PHP
PHP大神的十大优良习惯
Sep 14 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 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 无限级数据JSON格式及JS解析
2010/07/17 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
js实现图片轮播效果
2015/12/19 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python中redis的安装和使用
2016/12/04 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
Python WEB应用部署的实现方法
2019/01/02 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
上班打牌检讨书
2014/02/07 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
金融管理专业求职信
2014/07/10 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
债务授权委托书范本
2014/10/17 职场文书
市级三好学生评语
2014/12/29 职场文书
超强台风观后感
2015/06/09 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
Python函数中apply、map、applymap的区别
2021/11/27 Python