[학습노트] 라벨의 서비스 용기 조사

7106 단어 PHPtech
Laavel에는 서비스 컨테이너, 서비스 제공자의 구조가 있습니다.
이것들에 대해 완전히 무식하기 때문에 조사했다.
서비스 용기란?
[라벨] 서비스 용기는?두 개의 강력한 무기를 보유한 실례화 기계.간단히 설명하다.
상술한 사이트에 의하면 이른바 서비스 용기라고 한다
학급을 실례화할 수 있는 편리한 기능인 것 같다.$ClassA = app()->make(ClassA::class);이렇게 사용하세요.
이렇게 되면 ClassA의 실례는 변수$ClassA에 대입된다.
그럼 뭐가 편해요?
하나는'의존 해결해줘'.
또 하나는'실례적인 방법을 선택할 수 있다'.
모습
• 의존을 해결하려면 무엇이 좋을까?
여기에 실례화하고 싶은 ClassA가 있다고 가정해 보세요.이 ClassA는 구조기에서 실례화된 ClassB로 사용되고 있다.그러면 ClassA를 실례화하기 위해서는 먼저 실례 ClassB를 매개 변수의 실례 ClassA로 만들어야 한다.
서비스 용기를 사용하면 ClassA를 실례화할 때 자동으로 이것을 합니다. (ClassB의 실례화)
절차로 삼다
서비스 컨테이너를 통해 ClassA의 인스턴스화 선언
서비스 컨테이너가 ClassA를 검사하고 ClassA 내부에서 ClassB를 사용하는 것을 발견
서비스 컨테이너 인스턴스화 ClassB
ClassB 제공, ClassA 인스턴스화
이런 인상.
또한, ClassB가 ClassC를 더 실례적으로 사용하더라도 ClassD가 더 실례적으로 사용하더라도 서비스 용기는 모두 실례화하고 순차적으로 납품해 최종 ClassA의 실례화가 마무리된다.
・ 실례화 방법을 선택한 것은 어떻게 된 일입니까?
ClassE를 실례화할 때, ClassE는 문자열 'hogehoge' 를 $hoge의 속성에 대입하려고 합니다.
class ClassE
{
    public $hoge;

    public function __construct()
    {
    }
}

$app->bind의 기능을 사용하면 됩니다.$app->bind 첫 번째 파라미터에서'실례화 방법을 맞춤형으로 만들고 싶은 클래스'를 설명하고 두 번째 파라미터에서'실례화 방법'을 설명한다.
예컨대

app()->bind(ClassE::class, function () {
    $classE = new ClassE();
    $classE->hoge = 'hogehoge';
    return $classE;
});

의 경우$ClassE = $app()->make(ClassE::class);, 서비스 컨테이너
$classE = new ClassE();
$classE->hoge = 'hogehoge';
다음을 클릭합니다.
return $classE;
ClassE 인스턴스로 돌아갑니다.
클라스에 의존해서 해결할 필요가 있다면

app()->bind(ClassE::class, function ($app) {
-    $classE = new ClassE();
+    $classE = $app()->make(ClassE::class);
    $classE->hoge = 'hogehoge';
    return $classE;
});

와bind내 사용$app()->make().
기술

app()->bind(ClassE::class, function ($app) {
    $classX = $app()->make(ClassX::class);
    return $classX;
});

이면 $app()->make(ClassE::class);의 반환값은 ClassX의 실례이다.
이bind의 실례화 방법의 기술을'결합'이라고 부른다.

좋은 웹페이지 즐겨찾기