用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'
);

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

最新文章

  1. Django models .all .values .values_list 几种数据查询结果的对比
  2. [python]初试页面抓取——抓取沪深股市交易龙虎榜数据
  3. loadrunner关联取参--响应值unicode编码处理过
  4. UESTC 395 Dynamic Query System --Treap
  5. iOS之05-三大特性之封装
  6. zepto源码--核心方法7(管理包装集)--学习笔记
  7. [LeetCode]题解(python):034-Search for a Range
  8. iOS App完整项目
  9. eclipse添加xsd
  10. Oracle EBS-SQL (INV-1):检查物料成本为0并且物料状态不是'NEW'的物料.sql
  11. JVM(一) OpenJDK1.8源码在Ubuntu16.04下的编译
  12. HTML5 Geolocation API工作原理[转载]
  13. exec 命令简单用法 和 find 搭配用法示例
  14. (function(){…})(); 与 (function(){…}());
  15. PC浏览器播放m3u8
  16. Bootstrap Popover
  17. Unix环境高级编程:fork, vfork, clone
  18. ios中键盘处理适合ipad 和iphone
  19. 影响SEO 搜索引擎优化的网页制作细节
  20. 【Mac 快捷键】 (不定时持续更新)

热门文章

  1. 蓝桥网试题 java 入门训练 A+B问题
  2. C++编程练习(17)----“二叉树非递归遍历的实现“
  3. 【小分享】Date对象封装,时间格式化函数time()
  4. UITextField总结
  5. Android Studio --“Cannot resolve symbol” 解决办法
  6. Sublime Text 中文乱码解决方案
  7. object c入门
  8. NoSql研究报告
  9. vpn安装
  10. 1详细解析HTML基础结构