계약
, ServiceContainer
, ServiceProvider
, Facades
Contracts
, ServiceContainer
, ServiceProvider
, Facades
1.Contracts
合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现里面的方法;
2.ServiceContainer
,实现Contracts
,具体的逻辑实现;
3.ServiceProvider
, serviceContainer
的服务提供者,返回ServiceContainer
的实例化,供其他地方使用,可以把它加入到app/config
的provider
中,会被自动注册到容器中;
4.Facades
, 简化ServiceProvider
的调用方式,而且可以静态调用ServiceContainer
中的方法;
实现
Contracts
接口可以写或不写,这里就不定义了;
定义一个ServiceContainer
,实现具体的功能
namespace App\Helper; class MyFoo { public function add($a, $b) { return $a+$b; } }
定义一个ServiceProvider
供其他地方使用ServiceContain
<?php namespace App\Providers; use App\Helper\MyFoo; //要服务的Container use Illuminate\Support\ServiceProvider; use App; class MyFooServiceProvider extends ServiceProvider { public function boot(){} //注册到容器中 public function register() { //可以这么绑定,这需要use App; App::bind("myfoo",function(){ return new MyFoo(); }); //也可以这么绑定 $this->app->bind("myfoo", function(){ return new MyFoo(); }); } }
在app/config.php
中的providers
数组中加入ServiceProvider
,让系统自动注册
AppProvidersMyFooServiceProvider::class
,
这时候就可以使用了,假设在控制器中使用
public function two($id=null) { //从系统容器中获取实例化对象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); }
这样太麻烦,还需要用make
来获取对象,为了简便,就可以使用门面功能,定义门面MyFooFacade
계약
계약, 계약, 즉 인터페이스는 몇 가지 규칙을 정의하며, 이 인터페이스를 구현하는 모든 사람은 2. ServiceContainer
, 특정 로직인 계약
을 구현해야 합니다. 구현 ;3. serviceContainer
의 서비스 공급자인 ServiceProvider
는 다른 곳에서 사용할 수 있도록 ServiceContainer
의 인스턴스화를 반환합니다. app/config
의 code>provider는 컨테이너에 자동으로 등록됩니다. 4. Facades
는 ServiceProvider
호출 방법을 단순화합니다. , ServiceContainer
의 메소드는 정적으로 호출될 수 있습니다. 구현계약
인터페이스는 작성되거나 작성되지 않을 수 있습니다.
ServiceContainer
를 정의하세요. 🎜namespace App\Facades; use Illuminate\Support\Facades\Facade; class MyFooFacade extends Facade { protected static function getFacadeAccessor() { //这里返回的是ServiceProvider中注册时,定义的字符串 return 'myfoo'; } }
ServiceProvider
를 정의하세요. use App\Facades\MyFooFacade; public function two($id=null) { //从系统容器中获取实例化对象 $myfoo = App::make("myfoo"); echo $myfoo->add(1,2); //使用门面 echo MyFooFacade::add(4,5); }
app/config.php
의 providers
배열에 ServiceProvider
를 추가하면 시스템이 자동으로 🎜🎜 를 등록할 수 있습니다. 이때 AppProvidersMyFooServiceProvider::class
,🎜🎜 🎜🎜를 사용할 수 있습니다. 컨트롤러에서 🎜rrreee🎜 🎜🎜을 사용하면 너무 번거로워서 make
를 사용해야 합니다. 객체를 얻으려면 단순화를 위해 Facade 함수를 사용하고 MyFooFacade
🎜rrreee🎜 🎜🎜컨트롤러에서 직접 호출할 수 있습니다🎜rrreee🎜 🎜🎜 🎜🎜일반적으로 사용자 정의 클래스를 생성한 후에는 서비스 제공자와 Facade를 사용하여 다른 곳에서 쉽게 사용할 수 있습니다. 🎜🎜추천: "🎜laravel 튜토리얼🎜"🎜위 내용은 laravel의 Contracts, ServiceContainer, ServiceProvider 및 Facades 간의 관계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!