PHP 종속성 주입에 대한 자세한 소개(예제 포함)

不言
풀어 주다: 2023-04-05 15:50:02
앞으로
2261명이 탐색했습니다.

이 글은 PHP 종속성 주입에 대한 자세한 소개를 제공합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

종속성 주입

전통적인 아이디어

애플리케이션이 Foo 클래스를 사용할 때 Foo 클래스를 생성하고 Foo 클래스의 메서드를 호출합니다. .
이 메서드에 Bar 클래스가 필요한 경우 Bar 클래스가 생성되고 Bar 클래스의 메서드가 호출됩니다.
이 방법에 Bim 클래스가 필요한 경우 Bim 클래스를 만든 다음 다른 작업을 수행합니다.

/**
*  Foo
*/
class Foo 
{

    public function doSomething($value='')
    {
        # code...
        $Bar = new Bar();
        $Bar->doSomething();
        echo 'Foo doSomething','<br />' ;
    }
}

/**
*  Bar
*/
class Bar 
{
    

    public function doSomething($value='')
    {
        # code...
        $Bim = new Bim();
        $Bim->doSomething();
        echo 'Bar doSomething','<br />' ;
    }
}

/**
* Bim
*/
class Bim
{
    

    public function doSomething($value='')
    {
        # code...
        echo 'Bim doSomething','<br />'  ;
    }
}

$doSomething = new Foo();
$doSomething->doSomething();
로그인 후 복사

종속성 주입

응용 프로그램은 Foo 클래스를 사용하고 Foo 클래스에는 Bar 클래스가 필요하며
Bar 클래스에는 Bim 클래스가 필요하고 Bim을 생성합니다. class를 먼저 만든 다음 Bar 클래스를 만들고 Bim을 주입한 다음 Foo 클래스를 만들고 Bar 클래스를 주입하고
그런 다음 Foo 메서드를 호출하고 Foo가 Bar 메서드를 호출한 다음 다른 작업을 수행합니다.

/**
* Bim2
*/
class Bim2 
{
    
    public function doSomething($value='')
    {
        # code...
        echo 'Bim2 doSomething','<br />' ;
    }

}

/**
*  Bar2
*/
class Bar2
{

    private $bim2 ;

    public function __construct(Bim2 $bim2)
    {
        # code...
        $this->bim2 = $bim2 ;
    }

    public function doSomething($value='')
    {
        # code...
        $this->bim2->doSomething();
        echo "Bar2 doSomething",'<br />';
    }
}

/**
* Foo
*/
class Foo2
{
    
    private $bar2 ;
    public function __construct(Bar2 $bar2)
    {
        # code...
        $this->bar2 = $bar2 ;
    }

    public function doSomething($value='')
    {
        # code...
        $this->bar2->doSomething();
        echo "Foo2 doSomething",'<br />';
    }
}

$doSomething2 = new Foo2(new Bar2(new Bim2()));
$doSomething2->doSomething();
로그인 후 복사

이것이 제어 반전 패턴입니다. 종속성 제어는 호출 체인의 시작 부분으로 반전됩니다. 이렇게 하면 종속성을 완벽하게 제어할 수 있고 주입된 다양한 개체를 조정하여 프로그램의 동작을 제어할 수 있습니다.
예를 들어 Foo 클래스는 memcache를 사용하는데, Foo 클래스 코드를 수정하지 않고도 대신 redis를 사용할 수 있습니다.
종속성 주입 컨테이너를 사용하는 기본 아이디어는 애플리케이션이 Foo 클래스를 가져와야 하는 경우 컨테이너에서 Foo 클래스를 가져오고, 컨테이너가 Bim 클래스를 만든 다음 Bar 클래스를 만들고 Bim을 주입한 다음, Foo 클래스를 생성하고 여기에 Bar를 삽입하면 애플리케이션은 Foo 메서드를 호출하고 Foo는 Bar 메서드를 호출한 다음 다른 작업을 수행합니다.

Extension: 컨테이너는 종속성 주입을 담당합니다. , 처리 종속성 등

위 내용은 PHP 종속성 주입에 대한 자세한 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿