用Laravel开发前前后后有2个月左右了,之前一直写Java,就像找到Java和PHP之前的共同点,用Java的某些原理去理解PHP会发现还是有很多共通之处的。Java的依赖注入已经是一个很常见的概念了,Spring框架主要就是解决了这一点,在PHP的laravel框架中,也出现了依赖注入的方式。

依赖注入就控制反转的一种是实现方式,面向对象的特征的重要体现,那么依赖注入中什么是依赖呢,这点用Java开发的人很多都能理解。笼统的说依赖就是一种联系,变量和实现的联系。有关于依赖注入的理解之前写过,传送门:http://www.cnblogs.com/Summer7C/p/5415887.html

接下来说说Laravel中的依赖注入。

之前就听说Laravel的特点中依赖注入就是其中之一,一直在寻找依赖注入和Spring的感觉。

Laravel提供了多种依赖注入的方式。首先就将实现构造器或者方法参数的注入,这种依赖注入的方式比较简单,也不需要怎么配置。只要在方法的参数中写入类的类型,这个时候,类的实例就会注入到这个参数上,我们在使用的时候,就可以直接使用,而不用我们再去new这个类的实例,这个new的过程,已经由框架替我们做了。

例如:

 class Test
{
//这是一个类
} class TestController extend Controller
{
public function __contract(Test $test)
{
print_r($test);
}
}

这样我们不用对$test变量做任何的赋值操作,Laravel会帮我们把Test的实例赋值给$test变量,这就是一种依赖注入的使用。我们的依赖的Test就这样被注入到了参数里头。我们平时使用Laravel的控制器中接收页面参数的时候,就是依赖注入。

那么,我们在Java中常用的一种面向接口编程的方式,Laravel框架也同样提供了,这种面向接口编程的方式。这种方式很简单,首先我们的所有调用都是面向接口的。我们这里先写一个接口:

 interface TestInterface
{
//接口的方法
}

定义好了接口,我们就要定义接口的实现类:

 class TestService implements TestInterface
{
//实现的方法
}

如何将依赖完成呢?Laravel的实现很简单,通过一个方法可以将实现和接口绑定起来。我们在Laravel框架下找app/Providers/AppServiceProider.php这个文件,打开之后他是长这样的:

 class AppServiceProvider extends ServiceProvider
{
public function boot()
{
} public function register()
{
//
}
}

在register方法下降接口绑定到实现上,在其中加入:

 $this->app->bind(
'Interface\TestInterface',
'Service\TestService'
);

这样在方法的参数中,只要把接口写上,就可以注入依赖了。

laravel框架中所用到的依赖注入的更多相关文章

  1. Laravel框架下容器Container 的依赖注入和反射应用

    依赖注入,简单说是把类里头依赖的对象,置于类外头,即客户端调用处.相当于把类与类解耦. 一个简单的例子: class A { public function __construct() { // 这种 ...

  2. Laravel框架中的数据库CURD操作、连贯操作、链式操作的用法

    Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于 ...

  3. 在laravel框架中使用mq

    本文写于2018-11-28 1.部署laravel项目 https://github.com/laravel/laravel  通过git克隆项目,或者下载zip包然后解压等方式都可以把larave ...

  4. ASP.NET MVC中使用Unity进行依赖注入的三种方式

    在ASP.NET MVC中使用Unity进行依赖注入的三种方式 2013-12-15 21:07 by 小白哥哥, 146 阅读, 0 评论, 收藏, 编辑 在ASP.NET MVC4中,为了在解开C ...

  5. 在 mvc 4 中使用 unity 进行依赖注入

    在 mvc 4 中使用 unity 进行依赖注入 关于依赖注入的概念,这里就不再叙述了,我们用 mvc 4 结合 unity,使用构造函数来进行依 赖注入.具体步骤如下: 1. 首先建立 一个 mvc ...

  6. 我在项目中运用 IOC(依赖注入)--实战篇

    上一篇<我在项目中运用 IOC(依赖注入)--入门篇>只是简单的使用 IOC.实际项目使用 IOC 的情景复杂多了,比如说,构造函数有多个参数,有多个类继承同一个接口... Unity都有 ...

  7. laravel框架中Job和事件event的解析

    本篇文章给大家带来的内容是关于laravel框架中Job和事件event的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 在做项目的时候,一直对Job和Event有个疑惑.感觉两 ...

  8. laravel框架中超实用的功能介绍

    本篇文章给大家带来的内容是关于laravel框架中超实用的功能介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 让lumen的dd() dump()像laravel一样优雅 1 c ...

  9. Laravel框架中Echo的使用过程

    今天的这篇文章中给大家分享关于laravel框架中echo的使用,文章的内容是一步一步来的,用了16步走完一个过程,过程很清晰,希望可以帮助到有需要的朋友吧.话不多说,直接看内容.官方文档推荐使用 P ...

随机推荐

  1. WinForm 文件操作

    文件及文件夹操作 C/S:WinForm可以操作客户端文件 Client ServerB/S:浏览器服务 Brower Server 命名空间:using system .IO; 1. File类:文 ...

  2. C++编程练习(15)----“排序算法 之 归并排序“

    归并排序 归并排序(Merging Sort)的原理: 假设初始序列含有 n 个记录,则可以看成是 n 个有序的子序列,每个子序列的长度为1,然后两两归并,得到 [n/2] ([ x ] 表示不小于 ...

  3. C语言 extern3 全局变量的使用

    和函数的全局使用极其类似: 第一种方法,也是最简单的: 在 first.h 中定义, ; 在对应的first.c中使用: #include "first.h" #include & ...

  4. contenteditable实现可编辑的HTML标签

    最近工作中遇到了一个小问题,让我学到了新的标签属性--contenteditable. 我需要实现的是手机端界面,特别简单的一个页面,如下图: 在我脑海里第一时间想到的应该就是一个form表单然后里面 ...

  5. DLL 导出函数

    DLL的链接方式分为两种:隐式链接和显式链接 DLL导出的函数 和 导出类在调用时,有些区别,这里暂时不讲,直说简单的导出函数: 隐式链接: #include "stdafx.h" ...

  6. make: Nothing to be done for `all'

    最近安装fastdfs,执行make.sh时,出现  Nothing to be done for `all' 在网上搜了一下,大部分是说 用 make clean 清除以前编译产生的目标文件. 我试 ...

  7. 【openstack N版】——认证服务keystone

    一. 基础环境 1.1环境介绍 linux-node1(控制节点) #系统版本 [root@linux-node1 ~]# cat /etc/redhat-release CentOS Linux r ...

  8. Nginx+tomcat动静分离安装脚本

    #!/bin/bashsetenforce 0systemctl stop firewalldtar -zxvf nginx-1.8.0.tar.gz -C /usr/src/ cd /usr/src ...

  9. 使用PHP生成二维码(PHPQRCode)

    关于什么是二维码,可以阅读 http://baike.baidu.com/view/132241.htm 这里就不多讲了,二维码的应用非常广泛,似乎一夜之间渗透到我们生活的方方面面,地铁广告.报纸.火 ...

  10. session 与 cookie的区别用法

    //设置cookie方法 setcookie("name",'zhangsan'); setcookie("name",'zhangsan',time()+60 ...