[학습노트] 라벨의 서비스 용기 조사
이것들에 대해 완전히 무식하기 때문에 조사했다.
서비스 용기란?
[라벨] 서비스 용기는?두 개의 강력한 무기를 보유한 실례화 기계.간단히 설명하다.
상술한 사이트에 의하면 이른바 서비스 용기라고 한다
학급을 실례화할 수 있는 편리한 기능인 것 같다.
$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의 실례화 방법의 기술을'결합'이라고 부른다.
Reference
이 문제에 관하여([학습노트] 라벨의 서비스 용기 조사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/honda/articles/39b1e1c2c58d1e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)