>  기사  >  백엔드 개발  >  PHP 의존성 주입은 무엇을 의미합니까?

PHP 의존성 주입은 무엇을 의미합니까?

WBOY
WBOY원래의
2022-03-10 16:45:254346검색

PHP에서 종속성 주입은 생성자를 통해 클래스 종속성을 자동으로 주입하는 것을 의미합니다. 컨트롤러 아키텍처 방식과 동작 방식에서 매개변수에 객체형 제약을 가하면 의존성 주입은 자동으로 제거된다. 컨트롤러에 접근하기 위한 매개변수는 URL 요청에서 오기 때문에 일반 변수는 매개변수 바인딩을 통해 자동으로 얻어지고, 객체 변수는 자동으로 획득된다. 종속성 생성을 통해.

PHP 의존성 주입은 무엇을 의미합니까?

이 문서의 운영 환경: Windows 10 시스템, PHP 버전 7.1, Dell G3 컴퓨터.

PHP 종속성 주입이란 무엇을 의미합니까?

종속성 주입은 본질적으로 생성자를 통해 클래스 종속성을 자동으로 주입하는 것을 의미합니다. 예를 들어 객체 유형 제약 조건이 컨트롤러 아키텍처 메서드 및 작업 메서드의 매개 변수에 배치되면 종속성이 자동으로 트리거됩니다. 주입, 액세스 컨트롤러의 매개변수는 모두 URL 요청에서 오기 때문에 매개변수 바인딩을 통해 일반 변수를 자동으로 얻고, 종속성 주입을 통해 객체 변수를 생성합니다.

소위 종속성, 예를 들어 한 클래스는 Person이고 다른 클래스는 Car입니다. Drive와 같은 Person의 메서드가 Car를 참조해야 하는 경우 Person 클래스는 Car 클래스에 종속된다고 합니다. 이 종속 관계는 여전히 유효합니다. 예를 들어 Person 클래스의 객체 소년은 Car 클래스의 객체 Toyota에 의존합니다. 드라이브 메소드의 구현에 대해 이야기해 봅시다. 코드가 다음과 같다고 가정합니다:

Public Person{
...
public void drive(){
  Car toyota=new Car("TOYOTA");
  toyota.挂档;
  toyota.踩油门;
  toyota.打方向;
}
}

이 종속성으로 인해 객체 소년은 객체 생성을 책임져야 하고 심지어 전체 수명의 관리까지 책임져야 합니다. 예를 들어, 이 소년이 Audi를 운전하게 하려면 Person과 유사한 코드를 수정해야 합니다.

그래서 자바의 디자인 이론에서 아주 유명한 원리가 제안되었는데, 바로 의존성 역전 원리(Dependence Inversion)입니다. 핵심 아이디어는 구체적인 클래스 간의 종속성을 최대한 추상적인 종속성으로 변환하는 것입니다. Person 클래스는 특정 클래스인 Car가 아닌 추상 클래스 ICar에 의존해야 합니다. 여기서 Java는 추상화와 인터페이스의 사용을 강력히 권장합니다. 여기로 들어가세요.

이러한 종속성 역전 원칙은 팩토리 패턴, 빌드 패턴 등 많은 디자인 패턴에도 반영됩니다. 개인적으로 제어 IoC의 역전은 실제로 이 원칙을 구현한 디자인 패턴이라고 볼 수 있다고 생각합니다. 제어 역전, 저는 제어라는 단어가 무엇을 의미하는지 잘 이해하지 못했습니다. 그러나 제어 역전을 말하는 또 다른 방법은 의존성 주입입니다. 개인적으로 이해하기 더 쉽습니다. 위의 소년과 도요타의 예를 들어보겠습니다. 핵심은 소년이 도요타를 직접 참조할 필요 없이 소년이 의존하는 객체인 도요타를 소년에게 주입하는 것입니다. 이 주입 과정은 일반적으로 소년이 필요하지 않고 제어 프로그램에 의해 완료됩니다. 예를 들어 toyota를 참조하세요.

Public Person{
private ICar car;
public Person(ICar onecar){
  car=onecar;
}
public void drive(){
  car.挂档;
  car.踩油门;
  car.打方向;
}
}

이때 주입 및 호출 프로세스는 다음과 같이 매우 간단합니다.

Toyota toyota=new Toyota();
Person boy=new Person(toyota);
boy.drive();

참고: 여기서는 Toyota 클래스가 해당 객체의 특정 구현이라고 가정합니다. ICar 인터페이스 클래스.

이 예제에서는 가장 간단한 주입 방법, 즉 종속 개체를 개체의 생성자에 주입하여 달성되는 생성자 메서드 주입의 예를 보여줍니다. 일반적으로 사용되는 주입 방법도 있는데, 속성 기반 주입인데, 이는 객체의 속성에 종속 객체를 주입하여 달성된다는 의미입니다. 다음과 같이 boy와 toyota의 예를 들어보겠습니다. time, inject 및 call 프로세스는 다음과 같습니다.

Public Person{
private ICar car;
public Person(){
}
public void drive(){
  car.挂档;
  car.踩油门;
  car.打方向;
}
public ICar getCar(){
  return this.car;
}
public void setCar(ICar onecar){
  car=onecar;
}
}

이제 종속성 주입의 개념이 상대적으로 명확해졌습니다. Spring에서 IoC를 구현하는 방법을 살펴보고 Spring이 성숙한 IoC 컨테이너로 어떻게 작동하는지 살펴보겠습니다. Spring에서는 주로 두 가지 개념을 통해 IoC를 구현한다. 첫째, XML 구성 파일을 통해 객체와 종속 객체를 XML 파일로 구성한다. 물론 XML 파일은 Spring에서 지정한 사양을 준수해야 한다. 그런 다음 아키텍처의 BeanFactroy 클래스를 통해 위의 내용을 자동으로 구현합니다. 기사에 설명된 주입 프로세스는 다음과 같이 여전히 boy와 toyota를 예로 사용합니다.

먼저 Person 클래스는 여전히 동일합니다.

그런 다음 무언가를 추가합니다. xml 구성 파일에 - (bean.xml로 가정):

Toyota toyota=new Toyota();
Person boy=new Person();
boy.setCar(toyota);
boy.drive();

마지막으로 호출합니다. 프로세스는 다음과 같습니다.

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
   <bean id="oneCar" class="Toyota"> <!-- Toyota类是ICar的一个实现-->
   </bean>
   <bean id="onePerson" class="Person"> <!--本例以属性方式注入为例 -->
       <property name="car"> 
           <ref bean="oneCar"></ref>
       </property>
   </bean>
</beans>

권장 학습: "

PHP Video Tutorial

"

위 내용은 PHP 의존성 주입은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.