이 글에서는 주로 객체지향 PHP의 5대 원칙인 DIP(Dependency Inversion 원리)를 소개합니다. 의존성 역전 원리의 개념과 원리를 간략하게 설명하고, PHP 종속성 역전 원리의 관련 정의와 사용 방법을 분석합니다. 필요하신 분들은 참고하세요
본 글에서는 객체지향 PHP의 5대 원칙 중 DIP(Dependency Inversion 원리)를 예시와 함께 설명하고 있습니다. 참고할 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
종속성 역전이란 무엇인가요? 간단히 말하면 종속성 관계를 종속성 인터페이스로 반전시키는 것을 의미합니다. 구체적인 개념은 다음과 같습니다.
1. 상위 모듈은 모두 추상화(상위 모듈)에 종속되어서는 안 됩니다. 클래스는 서브클래스에 의존할 수 없으며 모두 서브클래스에 의존합니다. (추상 클래스의 경우)
2. 추상화는 구체성에 의존할 수 없고 구체성은 추상화에 의존해야 합니다.
여기서 인터페이스는 좁은 의미의 인터페이스가 아니라는 점에 유의하세요.
왜 인터페이스에 의존하나요? 인터페이스는 문제의 추상화를 구현하고 추상화는 일반적으로 상대적으로 안정적이거나 상대적으로 자주 변경되지 않기 때문에 콘크리트는 변경 가능합니다. 따라서 종속성 추상화는 코드 확장 및 런타임 바인딩(다형성)을 구현하기 위한 기초입니다. 추상 클래스의 하위 클래스가 구현되는 한 해당 클래스의 모든 사용자가 사용할 수 있습니다. 여기서는 확장성의 개념이 강조됩니다. 일반적으로 확장성은 알려진 동작의 확장을 의미합니다. 인터페이스에 관해 이야기할 때 인터페이스는 상대적이어야 한다는 점도 언급됩니다. 이는 디자인 패턴이 아무리 발전해도 코드 수정 없이는 끊임없이 변화하는 상황을 달성하는 것이 불가능하다는 것을 말해줍니다. 객체지향의 5가지 원칙 중 종속성 역전이 가장 이해하고 구현하기 어려운 원칙이라고 생각합니다.
여기에서는 직원 클래스를 예로 들어 보겠습니다.
<?php interface employee { public function working(); } class teacher implements employee { public function working() { echo 'teaching...'; } } class coder implements employee { public function working() { echo 'coding...'; } } class workA { public function work() { $teacher = new teacher(); $teacher->working(); } } class workB { private $e; public function set(employee $e) { $this->e = $e; } public function work() { $this->e->working(); } } $worka = new workA; $worka->work(); $workb = new workB; $workb->set(new teacher()); $workb->work();
workA에서는 작업 메서드가 교사 구현에 의존하고, workB에서는 대신 작업이 추상화에 의존하므로 필요한 개체가 매개변수를 통해 전달될 수 있습니다. 위의 코드는 인터페이스를 통해 어느 정도의 디커플링을 달성하지만 여전히 제한적입니다. 인터페이스를 사용할 뿐만 아니라 팩토리를 사용하면 어느 정도의 분리 및 종속성 반전을 달성할 수 있습니다.
workB에서는 set 메소드를 통해 Teacher 인스턴스를 전달하여 팩토리 패턴을 구현합니다. 이러한 구현은 여전히 하드 코딩되어 있으므로 코드를 추가로 확장하려면 구성 파일에 이 종속성을 작성하여 workB에 특히 프로그램에 의해 구성된 교사 개체(예: 종속 클래스 파일이 존재하는지 여부)가 필요함을 나타냅니다. ) ) 및 로드 구성에 따라 달라지는 구현을 IOC 컨테이너라고 합니다.
IOC(Inversion of Control)의 개념은 많은 기사에서 볼 수 있었습니다. 실제로 IOC는 DIP(Dependence Inversion 원리)와 동의어입니다. IOC를 언급할 때 누군가 DI와 같은 개념을 언급하는 것을 볼 수도 있습니다. DI, 즉 종속성 주입은 일반적으로 DI(종속성 주입)와 DS(종속성 조회)가 IOC의 두 가지 구현이라고 믿어집니다. 그러나 일부 일반적인 개념이 발전하면서 이러한 개념 간의 관계가 모호해졌습니다. 일부 사람들은 IOC가 DI라고 생각합니다. 어떤 사람들은 IOC보다 의존성 주입에 대한 설명이 더 적절하다고 생각하며, 여기서는 이러한 개념 간의 관계가 얽히지 않을 것입니다.
클래식 J2EE 설계에서 DAO 레이어와 Servicen 레이어는 일반적으로 인터페이스 레이어와 구현 레이어로 세분화되며, 종속성은 구성 파일에서 구성됩니다. 이것이 가장 일반적인 DIP 애플리케이션입니다. Spring 프레임워크는 코드에서 IOC 창으로 제어를 제거하는 좋은 IOC 컨테이너입니다. 이는 XML 구성 파일을 통해 수행됩니다. Spring은 실행 중 구성 파일의 설정에 따라 객체 간의 종속성을 설정합니다.
아래 코드에서 볼 수 있듯이
<bean scopre="prototype" class="cn.notebook.action.NotebookListOtherAction" id="notebookListOtherAction"> <property ref="userReplyService" name="userReplyService" /> <property ref="userService" name="userService" /> <property ref="permissionService" name="permissionService" /> <property ref="friendService" name="friendService" /> </bean>
그러나 이러한 설정에는 여전히 문제가 있으며 구성 파일은 점점 더 커지고 이들 간의 관계는 점점 더 복잡해집니다. 또한 애플리케이션과 비즈니스가 변경됨에 따라 코드를 끊임없이 수정하는 악몽에서 벗어날 수 없습니다(여기서 구성 파일은 코드의 일부로 간주됩니다. 그리고 실제 개발에서는 단순히 구성 파일을 수정하는 경우는 거의 없습니다. 일반적으로 구성 파일이 수정되면 코드도 이에 상응하는 수정이 이루어집니다)
PHP에는 Spring과 유사한 구현도 있습니다. 즉, 구성 파일에 종속성이 작성되고 구성을 통해 필요한 개체가 생성됩니다. 파일. 그런 코드는 아직도 구현을 위해 구현되어 있는 것 같아요. Srping에서 구성 파일은 클래스의 런타임 종속성뿐만 아니라 트랜잭션 관리, AOP, 지연 로딩 등을 구성합니다. PHP에서 위의 기능을 달성하려면 소비량이 엄청납니다. 언어 관점에서 볼 때, PHP와 같은 동적 스크립팅 언어는 일부 다형성 기능을 구현한다는 점에서 컴파일된 언어와 다릅니다. 둘째, PHP는 Agile 개발 언어로서 빠른 개발, 명확한 로직, 단순하고 이해하기 쉬운 코드를 강조하며, 다양한 디자인 패턴 프레임워크를 추가할 경우 기술 구현 및 운영 효율성 측면에서 바람직하지 않습니다. 종속성 역전의 핵심 원칙은 디커플링입니다. 이 가장 원시적인 원리에서 벗어나는 것은 수레를 말 앞에 놓는 것입니다.
사실 종속성 반전의 원칙은 이미 많은 디자인 패턴에 암시되어 있습니다. 또한 우리는 의도적으로 또는 의도하지 않게 일부 종속성 반전 작업을 수행하고 있습니다. 단지 PHP와 마찬가지로 현재 상대적으로 완전한 IOC 컨테이너가 없으며 아마도 PHP에는 전혀 필요하지 않을 수도 있습니다.
DIP를 만나신다면:
1. 각 상위 클래스는 필요한 서비스에 대한 인터페이스 선언을 제안하고 하위 클래스는 이 인터페이스를 구현합니다.
2. 각 상위 클래스는 이 추상 인터페이스를 통해 서비스를 사용합니다.
관련 권장 사항:
PHP의 5가지 객체 지향 원칙 중 Liskov 대체 원리(LSP)에 대한 자세한 설명 - 클로저 원칙(OCP)에 대한 자세한 설명
위 내용은 PHP 객체지향_php 기술의 5가지 주요 원칙인 종속성 역전 원칙(DIP)에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 PHP에 대해 설명하고, 전체 형식, 웹 개발의 주요 용도, Python 및 Java와의 비교 및 초보자를위한 학습 용이성을 자세히 설명합니다.

PHP는 유효성 검사, 소독 및 보안 데이터베이스 상호 작용을 통해 보안을 보장하면서 $ \ _ post 및 $ \ _를 사용하여 데이터 양식 데이터를 처리합니다.

이 기사는 PHP와 ASP.NET을 비교하여 대규모 웹 응용 프로그램, 성능 차이 및 보안 기능에 대한 적합성에 중점을 둡니다. 둘 다 대규모 프로젝트에서는 실용적이지만 PHP는 오픈 소스 및 플랫폼 독립적이며 ASP.NET,

PHP의 사례 감도는 다양합니다. 함수는 무감각하고 변수와 클래스는 민감합니다. 모범 사례에는 일관된 이름 지정 및 비교를위한 사례 감수 기능 사용이 포함됩니다.

이 기사는 PHP의 페이지 리디렉션에 대한 다양한 방법에 대해 설명하고 헤더 () 함수에 중점을두고 "헤더가 이미 보낸 헤더"오류와 같은 일반적인 문제를 해결합니다.

기사는 기능의 예상 데이터 유형을 지정하는 기능인 PHP의 유형 힌트에 대해 설명합니다. 주요 문제는 유형 시행을 통해 코드 품질과 가독성을 향상시키는 것입니다.

이 기사에서는 PHP Data Objects (PDO)에 대해 설명합니다. PHP의 데이터베이스 액세스 확장. 데이터베이스 추상화 및 더 나은 오류 처리를 포함하여 준비된 진술과 MySQLI에 대한 이점을 통해 보안을 향상시키는 데 PDO의 역할을 강조합니다.

기사는 PHP API 생성 및 보호, Laravel 및 Best Security Practices와 같은 프레임 워크를 사용하여 엔드 포인트 정의에서 성능 최적화에 이르는 단계를 자세히 설명합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

Dreamweaver Mac版
시각적 웹 개발 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.
