关于依赖注入在PHP框架中的应用

关于依赖注入在PHP框架中的应用

ID:38779129

大小:97.61 KB

页数:35页

时间:2019-06-19

关于依赖注入在PHP框架中的应用_第1页
关于依赖注入在PHP框架中的应用_第2页
关于依赖注入在PHP框架中的应用_第3页
关于依赖注入在PHP框架中的应用_第4页
关于依赖注入在PHP框架中的应用_第5页
资源描述:

《关于依赖注入在PHP框架中的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、关于依赖注入在PHP框架中的应用现在的PHP应用包含了很多对象。有的对象能帮你发送电子邮件,另一个可以帮你把数据持久化到数据库中。在你的应用中,你可能会创建一个管理产品库存的对象,或者是一个处理第三方API数据的对象。这篇文章中,我们的关注这件事情:应用做了很多事情,它组织了很多对象来处理每一个任务。在PHP的Symfony2框架中,有一个特殊的对象,帮助你实例化、组织和获取应用中的那一系列的对象。它叫ServiceContainer(服务容器),可以让你标准化和集中化地创建应用中对象。容器让生活简化,它速度很快,包含的架构思想促进代码的重用和解耦。所有Symfony2

2、的核心的类都使用容器,容器为框架的速度和可扩展性做了最大的贡献。先来了解下什么是Service。简单的说,一个Service就是任何的可以完成某类“全局”任务的PHP对象。一个Service是一个PHP对象的通用性的术语,这个对象能执行特定的任务,通常被“全局”地使用,比如一个数据库连接的对象,或者一个能发送电子邮件的对象。如果拥有很多松耦合的Service,我们就说这个应用遵循了SOA(面向服务的架构)。创建一个Service很简单,你只要为那份能完成特定任务的代码写个类,就OK了。一般来说,PHP对象如果要成为Service,必须要在应用中被全局的使用。比如一个Ma

3、ilerService被全局的用于发送电子邮件,但是由Mailer发送的邮件内容对象(每次的内容都不同)就不是Service。既然Service这么容易创建,那有啥了不起的呢?如果你开始考虑将应用中的每个功能都分离开来,你就能开始感受Service的好处了。因为每个Service只做一个工作,你在任何地方都可以轻松地获得并使用它们的功能。每个Service也能更容易的被测试和配置,因为在应用中它们是互相分离的。将你的应用组织成一系列独立的Service的类,也是面向对象编程的最佳实践之一。这种技能在任何开发语言中都是好程序员的标志。什么是ServiceContainer

4、。ServiceContainer也叫DependencyInjectionContainer(依赖注入容器),就是一个简单的PHP对象,管理着Service们的实例化。假设你有个发送电子邮件的PHP类。如果不用ServiceContainer,在你需要它时,都必须手工地创建对象。这也算简单。但是,如果你不想重复地去配置它,就可以把它作为Service。当你需要创建一个Service,它依赖了ServiceContainer中一个或几个其他的Service们时,你才会意识到容器的强大。假设你的一个新的Service,依赖了发送电子邮件的Service。只要在新的Serv

5、ice配置中将发送电子邮件的Service设为参数即可,如果你的这个Service后来做了改动,需要再依赖一个Service,只需要改下配置,增加参数即可。对应到依赖注入模式,其实ServiceContainer就是注入器;ServiceA依赖ServiceB,前者是依赖者,后者是被依赖者;被依赖者的接口一般就是依赖的定义。这次设计模式解决的是整个框架的架构问题,解决了:功能间的松耦合、框架的扩展性,运行效率也高。其实还是蛮羡慕学Java的同学,很早就接触一些好的设计和应用,比如:Spring框架。当然现在PHP的新的框架层出不穷,也借鉴各种好的思想。面包和牛奶已经有了

6、,可以吃了。看Laravel的IoC容器文档只是介绍实例,但是没有说原理,之前用MVC框架都没有在意这个概念,无意中在phalcon的文档中看到这个详细的介绍,感觉豁然开朗,复制粘贴过来,主要是好久没有写东西了,现在确实很懒变得!首先,我们假设,我们要开发一个组件命名为SomeComponent。这个组件中现在将要注入一个数据库连接。在这个例子中,数据库连接在component中被创建,这种方法是不切实际的,这样做的话,我们将不能改变数据库连接参数及数据库类型等一些参数。[php] viewplaincopy1.

7、ent  4.{  5.  6.    /** 7.     * The instantiation of the connection is hardcoded inside 8.     * the component so is difficult to replace it externally 9.     * or change its behavior 10.     */  11.    public function someDbTask()  12.    {  13.        $connection = new

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。