1. laravel 使用
1.1. 架构分析
1.1.1. 服务容器 (Service Container)
Illuminate\Foundation\Application extends Illuminate\Container\Container
- IoC(Inversion of Control) 是面向对象编程中的一种设计原则
- DI(Dependency Injection) IoC 的一种实现
IoC 容器
Laravel 服务容器是管理类依赖和运行依赖注入的有力工具。依赖注入是一个花俏的名词,它实质上是指:类的依赖通过构造器或在某些情况下通过「setter」方法进行「注入」。
- bind 方法创建实例不是单例模式,而是创建新的实例。
- singleton 创建实例使用的是单例模式,每次返回同一个实例。
- instance 绑定一个已经存在的对象至容器中,后面的调用都会从容器中返回指定的实例
- 绑定初始数据
singleton方法其实也是调用bind方法,只是最后一个参数是true,表示单例模式。
1.1.2. 服务提供者 (Service Providers)
Illuminate\Support\ServiceProvider
往容器里边注入依赖
1.1.3. 容器接口(Facades)
Illuminate\Support\Facades\*
为应用程序的 服务容器 中可用的类提供了一个「静态」接口
在开发第三方扩展包时,如果需要使用和 Laravel 交互的扩展包,最好是注入 Laravel contracts 而不是使用 facades,因为扩展包不是在 Laravel 内部使用的,无法使用 Laravel 的 facades 的测试辅助函数。
原理
Facade
类利用了 __callStatic()
这个魔术方法来延迟调用容器中的对象的方法。
1.1.4. 接口契约(Contracts)
Illuminate\Contracts\*
是一组定义了框架核心服务的接口
Laravel 的 facades 提供一个简单的方法来使用服务,而不需要使用类型约束和在服务容器之外解析 contracts。大多数情况下,每个 facade 都有一个相应的 contract。
1.1.5. 路由
- 对应 facade
\Illuminate\Support\Facades\Route
- 对应 Contract
\Illuminate\Routing\Router
1.1.6. 中间件
App\Http\Middleware