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 和 MySQL 基础教程(三)
Oct 09 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
php实现的mongodb操作类
May 28 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
详解PHP的Yii框架中的Controller控制器
Mar 29 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
php微信浏览器分享设置以及回调详解
Aug 01 PHP
php操纵mysqli数据库的实现方法
Sep 18 PHP
YII框架关联查询操作示例
Apr 29 PHP
laravel 实现设置时区的简单方法
Oct 10 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 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 Mysql日期和时间函数集合
2007/11/16 PHP
php 应用程序安全防范技术研究
2009/09/25 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
jQuery新闻滚动插件 jquery.roller.js
2011/06/27 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
Python urlopen 使用小示例
2008/09/06 Python
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
早会主持词
2014/03/17 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
房产委托公证书样本
2014/04/04 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
党员年度个人总结
2015/02/14 职场文书
中学音乐课教学反思
2016/02/18 职场文书
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技