php中的依赖注入实例详解

 更新时间:2019年08月14日 08:41:05   作者:koastal  
这篇文章主要介绍了php中的依赖注入,结合实例形式详细分析了php依赖注入的概念、原理及相关操作注意事项,需要的朋友可以参考下

本文实例讲述了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数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • PHP SOCKET编程详解

    PHP SOCKET编程详解

    这篇文章主要介绍了PHP SOCKET编程详解,需要的朋友可以参考下
    2015-05-05
  • PHP实现带进度条的Ajax文件上传功能示例

    PHP实现带进度条的Ajax文件上传功能示例

    这篇文章主要介绍了PHP实现带进度条的Ajax文件上传功能,结合实例形式分析了php+ajax文件上传基础上添加进度条功能相关实现技巧,需要的朋友可以参考下
    2019-07-07
  • php 使用 __call实现重载功能示例

    php 使用 __call实现重载功能示例

    这篇文章主要介绍了php 使用 __call实现重载功能,结合实例形式分析了PHP使用__call实现重载的相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • ubuntu下编译安装xcache for php5.3 的具体操作步骤

    ubuntu下编译安装xcache for php5.3 的具体操作步骤

    本篇文章是对ubuntu下编译安装xcache for php5.3的操作进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP session反序列化漏洞深入探究

    PHP session反序列化漏洞深入探究

    这篇文章主要介绍了PHP session反序列化漏洞,我们一般利用反序列漏洞,一般都是借助unserialize()函数,不过随着人们安全的意识的提高这种漏洞利用越来越来难了
    2022-11-11
  • 让PHP支持页面回退的两种方法[转]

    让PHP支持页面回退的两种方法[转]

    让PHP支持页面回退的两种方法[转]...
    2007-02-02
  • PHP随机生成中文段落示例【测试网站内容时使用】

    PHP随机生成中文段落示例【测试网站内容时使用】

    这篇文章主要介绍了PHP随机生成中文段落,结合实例形式分析了PHP针对随机中文段落的编码转换、生成相关操作技巧,需要的朋友可以参考下
    2020-04-04
  • PHP抽象类基本用法示例

    PHP抽象类基本用法示例

    这篇文章主要介绍了PHP抽象类基本用法,结合实例形式分析了php抽象类的概念、原理、定义、使用方法及相关操作注意事项,代码注释包含较为详尽的说明信息,需要的朋友可以参考下
    2018-12-12
  • PHP进程间通信的几种方法详解

    PHP进程间通信的几种方法详解

    PHP是用C编写的,因此它对系统底层API的操作与C很像,同大多数语言一样,PHP进程间通信的方式有以下几种:消息队列,管道,共享内存,socket和信号,本文是对这几种通信方式对整理
    2023-06-06
  • PHP file_get_contents 函数超时的几种解决方法

    PHP file_get_contents 函数超时的几种解决方法

    在使用file_get_contents函数的时候,经常会出现超时的情况,在这里要通过查看一下错误提示,看看是哪种错误,比较常见的是读取超时,这种情况大家可以通过一些方法来尽量的避免或者解决。
    2009-07-07

最新评论