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 list()函数的详解
Jun 05 PHP
PHP中多维数组的foreach遍历示例
Jun 13 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
百万级别知乎用户数据抓取与分析之PHP开发
Sep 28 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
PHP实现原比例生成缩略图的方法
Feb 03 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
php获取POST数据的三种方法实例详解
Dec 20 PHP
使用php自动备份数据库表的实现方法
Jul 28 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 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网页病毒清除类
2014/12/08 PHP
Symfony生成二维码的方法
2016/02/04 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
jquery创建div 实现代码
2009/04/27 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
express.js中间件说明详解
2019/03/19 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
python输出100以内的质数与合数实例代码
2018/07/08 Python
基于python生成器封装的协程类
2019/03/20 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
卡骆驰德国官方网站:Crocs德国
2019/03/29 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
初中科学教学反思
2014/01/21 职场文书
电气个人求职信范文
2014/02/04 职场文书
就业表自我评价分享
2014/02/06 职场文书
倡议书格式
2014/08/30 职场文书
房产协议书范本
2014/10/18 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
导游词之清晏园
2019/11/22 职场文书
Python函数中apply、map、applymap的区别
2021/11/27 Python
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android