의존성 주입이 무엇인지 아시나요? DI(종속성 주입)의 개념이 심오해 보이지만 일부 최신 PHP 프레임워크를 사용해 본 적이 있다면 DI에 익숙해야 합니다. 왜냐하면 이 프레임워크는 모두 클래스 간 종속성을 처리하기 위해 종속성 주입을 사용하기 때문입니다.
PHP에서 종속성을 전달하는 세 가지 옵션사실 DI를 이해하려면 먼저 PHP에서 종속성을 전달하는 방법을 이해해야 합니다.
가장 바람직하지 않은 해결책이기도 한 첫 번째 해결책은 다음 코드와 같이 클래스 A의 new 키워드를 직접 사용하여 클래스 B를 생성하는 것입니다.
<?php class A { public function __construct() { $b = new B(); } }
두 번째 옵션은 클래스 A의 메서드에 필수 클래스 B를 전달하는 것입니다.
다음 코드는 다음과 같습니다.
<?php class A { public function __construct(B $b) { } }
세 번째 옵션은 다음 코드에 표시된 대로 set 메서드를 사용하여
을 전달하는 것입니다.<?php class A { public function setB(B $b) { $this->b = $b; } }
다음 코드는 트위터에서 가져온 것입니다.
<?php class Container { private $s=array(); function __set($k, $c) { $this->s[$k]=$c; } function __get($k) { return $this->s[$k]($this); } }
컨테이너를 만든 후 class A와 B 사이의 종속성을 어떻게 관리할 수 있습니까? 코드로 이야기해 보겠습니다.
<?php class A { private $container; public function __construct(Container $container) { $this->container = $container; } public function doSomeThing() { //do something which needs class B $b = $this->container->getB(); //to do } }
그런 다음 클래스 B를 컨테이너 클래스에 삽입합니다.
$c = new Container(); $c->setB(new B());
Enter를 전달할 수도 있습니다. 익명 함수를 사용하면 클래스 B가 전달될 때 즉시 인스턴스화되지 않지만 실제로 호출되면 인스턴스화 작업이 완료됩니다. 위 내용은 참고용입니다! 추천 튜토리얼: 위 내용은 PHP 의존성 주입이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!$c = new Container();
$c->setB(function (){
return new B();
});