以下针对laravel框架的优势描述:
laravel 相对于其他框架的优点
- 功能多: 队列, 搜索, 数据迁移, 定时脚本
- 通过composer使用更多第三方包
- 设计思想先进, 使用了门面模式, 控制反转, 依赖注入等设计模式, 扩展性强;
- 社区活跃 , 开源项目多
概念解释
控制反转 (IoC)
就是说把创建对象的 控制权 进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,也就是 Laravel 中的容器。
依赖注入(DI)
帮助容器实现在运行中动态的为对象提供提依赖的资源。
通过形参申明需要的依赖类,由Laravel去动态实例化
依赖注入实现的方法:
- 闭包
- 反射api
实现依赖注入的具体过程
路径 : 项目路径\vendor\laravel\framework\src\Illuminate\Container\Container.php
先实例化容器类,然后使用 bind() 方法 绑定接口和 生成相应的实例的闭包函数。然后使用 make() 函数生成实例对象,在 make() 中会调用 isBuildable(abstract) 来判断 给定的服务实体(concrete) 函数 ,build($concrete) 函数会判断传的参数是 是 闭包 还是 具体类名 ,如果是闭包则直接运行,如果是具体类名的话,则通过反射获取该类的构造函数所需的依赖,完成实例化
服务提供者和服务容器的关系
服务提供者完成服务,组件的绑定
服务容器负责依赖注入,解决类的依赖实例化问题
门面模式
门面模式提供了简单的类方法调用方式,实现方法是先去服务提供者找类,若有实例则调用实例方法,否则利用反射api获得类并实例化,如果该类需要依赖其他类会用依赖注入去实例化需要的实例直到需要的实例被创建,然后调用实例的方法
契约
指框架提供的一系列定义核心服务的接口