찾다
백엔드 개발PHP 튜토리얼PHP에서 다중 상속을 시뮬레이션하는 방법

이 글은 주로 PHP에서 시뮬레이션 다중 상속을 구현하는 방법을 소개합니다. 이제는 모든 사람과 공유합니다. 도움이 필요한 친구들은 이를 참조할 수 있습니다.

PHP에서 시뮬레이션 다중 상속을 구현하는 방법

1.

한 문장 요약: 사실 다른 사람에게서 상속을 받으면 다른 사람의 클래스에 있는 메서드와 속성도 호출하고 싶기 때문에 이렇게 하면 됩니다. 이 클래스에서 대상 클래스의 개체를 만든 다음 메서드와 속성을 호출하면 됩니다. 이 객체를 통한 속성은 상속보다 더 편리합니다.

2. 매직 메소드 __call은 시뮬레이션된 다중 상속을 구현합니다

1. 관련 지식

PHP에는 다중 상속 기능이 없습니다. 다중 상속을 지원하는 프로그래밍 언어에서도 이 기능을 거의 사용하지 않습니다. 대부분의 사람들은 다중 상속이 좋은 설계 방법이 아니라고 생각합니다. 클래스에 추가 기능을 추가하려는 경우 상속을 사용할 필요가 없습니다. 여기에서는 참조용으로 다중 상속을 시뮬레이션하는 방법을 제공합니다.

PHP에는

__call이라는 마법의 메서드가 있습니다. 존재하지 않는 메소드를 호출하면 이 메소드가 자동으로 호출됩니다. 이 시점에서 호출을 기존 메서드로 리디렉션할 수 있는 기회가 있습니다. 여러 부모 클래스를 상속받은 하위 클래스의 경우 메서드를 찾는 과정은 일반적으로 다음과 같습니다.

자신의 메서드 -> 부모 클래스 1의 메서드 -> 부모 클래스 2의 메서드...

시뮬레이션 프로세스는 대략 다음과 같습니다.

각 상위 클래스를 인스턴스화한 다음 이를 하위 클래스의 속성으로 사용합니다. 이러한 상위 클래스는 일부 공개 메소드를 제공합니다. 하위 클래스에 메서드가 있으면 __call() 함수가 호출되지 않습니다. 이는 상위 클래스의 메서드를 "재정의"하는 것과 같습니다. 존재하지 않는 메소드가 호출되면 __call() 메소드를 사용하여 상위 클래스에서 차례로 호출할 수 있는 메소드를 찾습니다. 이것이 완전한 다중 상속은 아니지만 문제를 해결하는 데 도움이 될 수 있습니다.

 1 <?php 
 2 class Parent1 { 
 3     function method1() {} 
 4     function method2() {} 
 5 } 
 6 class Parent2 { 
 7     function method3() {} 
 8     function method4() {}
 9 }
 10 class Child {
 11     protected $_parents = array();
 12     public function Child(array $parents=array()) {
 13         $_parents = $parents;
 14     }
 15      
 16     public function __call($method, $args) {
 17         // 从“父类"中查找方法
 18         foreach ($this->_parents as $p) {
 19             if (is_callable(array($p, $method))) {
 20                 return call_user_func_array(array($p, $method), $args);
 21             }
 22         }
 23         // 恢复默认的行为,会引发一个方法不存在的致命错误
 24         return call_user_func_array(array($this, $method), $args);
 25     }
 26 }
 27 $obj = new Child(array(new Parent1(), new Parent2()));
 28 $obj->method1();
 29 $obj->method3();

여기에 관련된 속성 상속은 없지만 구현하기 어렵지 않습니다. 속성 상속은 __set() 및 __get() 매직 메서드를 통해 시뮬레이션할 수 있습니다. 직접 실천해 보시기 바랍니다.

기타 방법: 인터페이스를 통해 다중 상속 구현

PHP의 클래스는 하나의 상위 클래스만 상속할 수 있습니다. 여러 클래스를 상속하려면 인터페이스

인터페이스를 사용하여 다중 상속을 시뮬레이션해야 합니다

3. PHP 인터페이스를 통해

PHP 인터페이스에서는 인터페이스가 인터페이스를 상속받을 수 있습니다. PHP 클래스는 하나의 상위 클래스(단일 상속)만 상속할 수 있지만 인터페이스는 클래스와 다릅니다.

인터페이스는 다중 상속을 구현할 수 있으며 하나 이상의 인터페이스를 상속할 수 있습니다. 물론, 인터페이스 상속도 확장 키워드를 사용합니다. 여러 인터페이스를 상속하려면 상속된 인터페이스를 쉼표로 구분하면 됩니다. 인터페이스가 다른 인터페이스를 상속하는 경우 상위 인터페이스의 정적 상수 속성과 추상 메서드

를 직접 상속하므로 클래스

는 인터페이스를 구현할 때 관련된 모든 추상 메서드 를 구현해야 합니다. 이제 PHP 인터페이스 상속에 대해 어느 정도 이해하셨습니다. 다음 예제는 참조용입니다.

<?php 
interface father{ 
function shuchu(); 
}  
interface fam extends father{ 
function cook($name); 
}  
class test implements fam{ 
function shuchu(){ 
echo "接口继承,要实现两个抽象方法"; 
echo "<br>"; 
}  
function cook($name){ 
echo "平时经常做饭的人是:".$name;  
}  
}  
$t=new test(); 
$t->shuchu(); 
$t->cook("妈妈");  
?>

코드 실행 결과는 다음과 같습니다.

인터페이스 상속에는 두 가지 추상 메서드가 필요합니다. 일반적으로 요리하는 사람은: 엄마위의 예는 인터페이스가 인터페이스를 상속하므로 테스트 클래스가 fam 인터페이스를 구현할 때 두 개의 추상 메서드, 즉 인터페이스의 하위 클래스를 인스턴스화해야 한다는 것입니다. 상위 클래스 메소드의 추상화는 모두 인스턴스입니다.


인터페이스 다중 상속의 예를 살펴보겠습니다. 코드는 다음과 같습니다.

<?php 
interface father{ 
function shuchu(); 
} 
interface mother{ 
function dayin($my); 
} 
interface fam extends father,mother{ 
function cook($name); 
} 
class test implements fam{ 
function dayin($my){ 
echo "我的名字是:".$my;  
echo "<br>"; 
} 
function shuchu(){ 
echo "接口继承,要实现两个抽象方法"; 
echo "<br>"; 
} 
function cook($name){ 
echo "平时经常做饭的人是:".$name;  
} 
} 
$t=new test(); 
$t->shuchu(); 
$t->dayin("小强");  
$t->cook("妈妈");  
?>

실행 결과 예:

두 가지 추상 메소드를 구현하는 인터페이스 상속제 이름은 Xiaoqiang요리를 주로 하는 사람입니다. 예: 엄마 인터페이스는 두 개의 인터페이스를 상속하므로 이 코드는 모든 인스턴스 중에 이 세 가지 추상 클래스의 모든 추상 메서드를 인스턴스화해야 합니다. 이 두 예제를 읽고 나면 인터페이스 상속에 익숙해질 것입니다. 실제로 관련된 모든 추상 메서드가 구현되는 한 단일 상속과 다중 상속이 있습니다.



위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요!

관련 권장 사항:

PHP prepare에서 mysqli 전처리

PHP 다중 프로세스 프로그래밍에 대한 초기 소개

PHP 다형성의 이해

위 내용은 PHP에서 다중 상속을 시뮬레이션하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

TomakePhPapplicationSfaster, followthesesteps : 1) useopCodeCaching likeOpcachetOrpectipiledScriptBecode.2) MinimizedAtabaseQueriesByUsingQueryCachingandEfficientIndexing.3) leveragephp7 assistorBetterCodeeficiession.4) 구현 전략적 지시

PHP 성능 최적화 점검표 : 지금 속도를 향상시킵니다PHP 성능 최적화 점검표 : 지금 속도를 향상시킵니다May 12, 2025 am 12:07 AM

toImprovePhPapplicationSpeed, followthesesteps : 1) enableOpCodeCachingWithApcuTeCeScripteXecutionTime.2) 구현 구현

PHP 의존성 주입 : 코드 테스트 가능성을 향상시킵니다PHP 의존성 주입 : 코드 테스트 가능성을 향상시킵니다May 12, 2025 am 12:03 AM

의존성 주입 (DI)은 명시 적으로 전이적 종속성에 의해 PHP 코드의 테스트 가능성을 크게 향상시킵니다. 1) DI 디퍼 커플 링 클래스 및 특정 구현은 테스트 및 유지 보수를보다 유연하게 만듭니다. 2) 세 가지 유형 중에서, 생성자는 상태를 일관성있게 유지하기 위해 명시 적 표현 의존성을 주입합니다. 3) DI 컨테이너를 사용하여 복잡한 종속성을 관리하여 코드 품질 및 개발 효율성을 향상시킵니다.

PHP 성능 최적화 : 데이터베이스 쿼리 최적화PHP 성능 최적화 : 데이터베이스 쿼리 최적화May 12, 2025 am 12:02 AM

DatabaseQuesyOptimizationInphPinVolvesVesstoigiestoInsperferferferferformance.1) SelectOnlyNecessaryColumnstoredAtatatransfer.2) useinDexingTeSpeedUpdatarretieval.3) ubstractOrerEresultSoffRequeries.4) UtilizePreDstatements Offeffi

간단한 가이드 : PHP 스크립트와 함께 이메일 보내기간단한 가이드 : PHP 스크립트와 함께 이메일 보내기May 12, 2025 am 12:02 AM

phpisusedforendingemailsduetoitsbuitsbuitsbuit-inmail () functionandsupportivelibraries lifephpmailerandswiftmailer.1) usethemail () functionforbasicemails, butithaslimitations.2) EmployPhpmailerforAdvancedFeatirehtMailsAndAtachments.3))

PHP 성능 : 병목 현상 식별 및 수정PHP 성능 : 병목 현상 식별 및 수정May 11, 2025 am 12:13 AM

PHP 성능 병목 현상은 다음 단계를 통해 해결할 수 있습니다. 1) 성능 분석을 위해 Xdebug 또는 Blackfire를 사용하여 문제를 찾으십시오. 2) 데이터베이스 쿼리 최적화 및 APCU와 같은 캐시 사용; 3) Array_Filter와 같은 효율적인 기능을 사용하여 배열 작업을 최적화합니다. 4) 바이트 코드 캐시에 대한 OpCache 구성; 5) HTTP 요청을 줄이고 사진 최적화와 같은 프론트 엔드 최적화; 6) 지속적으로 모니터링하고 성능을 최적화합니다. 이러한 방법을 통해 PHP 응용 프로그램의 성능을 크게 향상시킬 수 있습니다.

PHP의 종속성 주입 : 빠른 요약PHP의 종속성 주입 : 빠른 요약May 11, 2025 am 12:09 AM

종속성 주사 (di) inphpisadesignpattern thatmanages 및 enpleducesclassdelencies, 향상 codemodularity, trestability 및 maintainability .itallowspassingDepporsingDikedAbaseConnectionStoclassesAssparameters, 촉진 이용성.

PHP 성능 향상 : 캐싱 전략 및 기술PHP 성능 향상 : 캐싱 전략 및 기술May 11, 2025 am 12:08 AM

cachingimprovesphpperferferfermanceStoringResultsOfcomputationSorqueriesforquickRetrieval, retingServerloadandenhancancing responsetimestimes : 1) opcodecaching, opcodecaching, whitescompiledphps scriptsinmorytoskipcompileation; 2) dataCachingUsingmemmc

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

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

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기