合同和立面laravel之间的差异

ujw*_*kal 14 oop interface laravel-5.1

我4个月以来一直在做laravel.我没有发现外观和合同之间的明显区别,因为它们都是接口集.为什么我会使用外墙而不是合同或合同而不是外墙?

Ada*_*dam 8

问题是使用Facade还是Contract归结为您想如何解析您的类以及您是否想使用接口。

正面

  • 外观是一个类而不是接口(这里是一个示例外观)。

  • Facade用于从服务容器中加载类更方便

  • 将要加载getFacadeAccessor()的类在外观类的方法中被阻止。

例子:

// Without facade - resolving from service container
app('some_service')->methodName();

// Do the same through facade:
someService::methodName();
Run Code Online (Sandbox Code Playgroud)

合同

  • 合约是一个接口(这里是一个例子)
  • 契约用于从服务容器加载类更方便,并作为接口
  • 将要加载的类在服务容器中确定,请参阅将接口绑定到实现

示例:假设该类some_service实现了接口Illuminate\Contracts\Config\Repository

// resolving class directly from service container
app('some_service')->methodName();

// resolve through binding from contract
app('Illuminate\Contracts\Config\Repository')->methodName();
Run Code Online (Sandbox Code Playgroud)