>  기사  >  백엔드 개발  >  PHP의 종속성 주입에 대해 자세히 알아보고 적용 방법을 알아보세요.

PHP의 종속성 주입에 대해 자세히 알아보고 적용 방법을 알아보세요.

青灯夜游
青灯夜游앞으로
2021-09-08 19:53:573303검색

의존성 주입이란 무엇인가요? 이 기사에서는 PHP의 종속성 주입을 이해하고 종속성 주입의 이유와 종속성 주입 적용 방법을 소개합니다. 여러분에게 도움이 되기를 바랍니다.

PHP의 종속성 주입에 대해 자세히 알아보고 적용 방법을 알아보세요.

1. 종속성 주입(DI)이란 무엇입니까?

  • 종속성 주입(DI)은 실제로 본질적으로 생성자를 통해 클래스 종속성을 자동으로 주입하는 것을 의미합니다.
  • 일반인의 용어로는 현재 운영 중인 운영 체제입니다. 그러나 이 클래스의 일부 메소드나 함수는 이 클래스만으로는 완료할 수 없지만 다른 클래스의 도움으로 완료할 수 있습니다. 가장 직접적인 징후는 매개변수 데이터가 객체로 전달될 때입니다. 엄밀히 말하면 두 클래스 사이에는 상호의존성이 존재합니다. 매개변수를 전달하는 방법을 주입이라고 합니다. 2. 처음에는 PHP가 필요할 때. 한 클래스에서 다른 클래스를 사용하려면 다음 작업을 수행합니다
  • 예를 들어 컨테이너 클래스에서 어댑터 클래스를 사용해야 하는 경우 사용하기 전에 인스턴스화해야 합니다
사용해야 하는 경우 외부 클래스의 경우 결합 정도가 너무 높아 나중에 유지 관리가 쉽게 어려워질 수 있습니다.

일반인의 용어로, 즉 외부 클래스 없이는 컨테이너가 작동할 수 없으며 이를 결합 정도가 너무 높다고 합니다.

<?php
class container
{
    private $adapter;

    public function __construct()
    {
        $this->adapter = new adapter();
    }
}

    3. 단순 종속성 주입
  • 위 코드는 결합도가 너무 높아서 주로 결합을 이해하기 위한 종속성 주입이 등장합니다.
  • 아래와 같이 클래스만 통과하면 됩니다. 그냥 입력하시면 됩니다
의존성 주입 연산의 매개변수는 일반적인 매개변수가 아닌 객체입니다. 잘 이해하셨나요?

그런데 이렇게 간단한 의존성 주입으로 인해 의존도가 많이 높아지게 됩니다. 매우 길고 혼동되기 쉽습니다

<?php
class container
{
    private $adapter;

    public function __construct(adapter $adapter)
    {
        $this->adapter = $adapter;
    }
}
4. 높은 수준의 종속성 주입

  • 위의 매개변수 혼동 문제를 해결하기 위해 이번에는 종속성 주입이 진화했습니다
  • Magic Method를 통해, __get이 객체를 설정합니다
  • 이때, 의존성이 너무 많고 매개변수가 혼동되는 문제를 해결할 수 있습니다
  • <?php
    class container
    {
        public $instance = [];
    
        public function __set($name, $value)
        {
            $this->instance[$name] = $value;
        }
    }
    
    $container = new container();
    
    $container->adapter = new adapter();

5. 의존성 주입 적용

  • 먼저 주로 사용되는 컨테이너 클래스를 정의합니다. 작업하려는 클래스를 컨테이너에 주입합니다
  • 사용할 때는 컨테이너의 객체만 전달하면 됩니다
<?php
class container
{
    public $instance = [];

    public function __set($name, $value)
    {
        $this->instance[$name] = $value;
    }
}

class adapter
{
    public $name = &#39;我是调度器&#39;;
}

$container = new container();
$container->adapter = new adapter();

class autofelix
{
    private $container;

    public function __construct(container $container)
    {
        $this->container = $container;
    }

    public function who($class)
    {
        return $this->container->instance[$class]->name;
    }
}

$autofelix = new autofelix($container);

$who = $autofelix->who(&#39;adapter&#39;);

var_dump($who); //我是调度器

6. 고급 최적화

  • 위 애플리케이션에서는 직접 주입합니다. 인스턴스화된 개체를 컨테이너에 넣습니다
  • 이로 인해 모든 개체가 사용되기 전에 인스턴스화되어 리소스 손실이 발생합니다
개체가 인스턴스화되어 주입되지 않도록 클로저를 전달할 수 있습니다. 인스턴스화

하면 서버 리소스 손실을 줄일 수 있습니다

<?php
$container = new container();
$container->adapter = new adapter();

//高阶优化
$container = new container();
$container->adapter = function () {
    return new adapter();
};

원본 주소: https://juejin.cn/post/7004616671864291359
  • 추천 학습: "
  • PHP 비디오 튜토리얼
  • "

위 내용은 PHP의 종속성 주입에 대해 자세히 알아보고 적용 방법을 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제