> 백엔드 개발 > PHP 문제 > PHP에서 DI 종속성 주입을 간단히 이해하세요.

PHP에서 DI 종속성 주입을 간단히 이해하세요.

WBOY
풀어 주다: 2023-03-16 17:08:02
앞으로
1712명이 탐색했습니다.

이 글에서는 PHP 관련 지식을 소개합니다. 종속성 주입 DI는 실제로 생성자를 통해 클래스에 대한 종속성을 자동으로 주입하는 것을 의미합니다. 함께 살펴보겠습니다. 모든 사람.

(권장 튜토리얼: PHP 비디오 튜토리얼)

DI/종속성 주입이란 무엇입니까

종속성 주입 DI는 실제로 클래스의 종속성이 생성자를 통해 자동으로 주입된다는 것을 의미합니다

일반인의 용어로 말하면, 현재 클래스를 운영하고 있지만 이 클래스의 일부 메소드나 기능은 이 클래스만으로는 완료할 수 없고 다른 클래스의 도움을 받아 완료해야 합니다. 가장 직접적인 징후는 매개변수 데이터가 객체로 전달된다는 것입니다. 언제. 엄밀히 말하면 두 클래스 사이에 상호의존성이 존재하는데, 이를 인젝션(injection)이라고 하는데, 의존성 주입이 나타나는 이유는 PHP를 사용하지 않을 때입니다. 한 클래스의 다른 클래스에서는 다음 작업을 수행하는 경우가 많습니다

예를 들어 컨테이너 클래스에서 어댑터 클래스를 사용해야 하는 경우 사용하기 전에 인스턴스화해야 합니다

많은 수의 외부 클래스를 사용해야 하는 경우 , 이로 인해 결합도가 너무 높아 나중에 유지 관리가 쉽게 어려워질 수 있습니다

간단히 말하면 외부 클래스 없이는 컨테이너가 작동할 수 없다는 뜻인데, 이를 결합도가 너무 높다고 합니다

<?php
class container
{
    private $adapter;

    public function __construct()
    {
        $this->adapter = new adapter();
    }
}
로그인 후 복사

단순 종속성 주입

위 코드의 결합 정도가 너무 높아서 주로 결합을 이해하기 위한 종속성 주입이 등장합니다.

다음의 경우 필요한 클래스 객체만 전달하면 됩니다. 조작됨

의존성 주입 연산의 매개변수는 객체입니다. 일반 매개변수 대신 이해가 더 잘 되시나요?

그런데 이렇게 간단한 의존성 주입은 클래스에 많이 의존하면 시간이 매우 길어질 수 있습니다. 매개변수를 전달하면 혼동되기 쉽습니다

<?php
class container
{
    private $adapter;

    public function __construct(adapter $adapter)
    {
        $this->adapter = $adapter;
    }
}
로그인 후 복사

고수준 종속성 주입

위의 혼동되는 매개변수 문제를 해결하기 위해 이번에는 종속성 주입이 최적화되었습니다

매직 메서드를 통해 __get to set the object

이제 우리는 의존성이 너무 많고 매개변수가 혼란스러운 문제를 해결할 수 있습니다

<?php
class container
{
    public $instance = [];

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

$container = new container();

$container->adapter = new adapter();
$container->autofelix = new autofelix();
로그인 후 복사

종속성 주입 애플리케이션

먼저 작업하려는 클래스를 객체에 주입하는 데 주로 사용되는 컨테이너 클래스를 정의합니다. 컨테이너

사용 시에는 컨테이너 개체만 전달하면 됩니다

<?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); //我是调度器
로그인 후 복사

의존성 주입 고수준 최적화

위 애플리케이션에서는 인스턴스화된 개체를 컨테이너에 직접 주입합니다.

이렇게 하면 모든 개체가 인스턴스화됩니다. 사용되기 전에 리소스 손실이 발생합니다

클로저를 전달할 수 있습니다. 이렇게 하면 개체가 인스턴스화 및 주입되지 않고, 사용해야 할 때 다시 인스턴스화할 수 있으므로 서버 리소스 손실을 줄일 수 있습니다.

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

//高阶优化
$container = new container();
$container->adapter = function () {
    return new adapter();
};
로그인 후 복사

(추천 튜토리얼:

PHP 비디오 튜토리얼

)

위 내용은 PHP에서 DI 종속성 주입을 간단히 이해하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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