>백엔드 개발 >PHP 튜토리얼 >PHP_php 기술의 인터페이스 적용에 대한 자세한 해석

PHP_php 기술의 인터페이스 적용에 대한 자세한 해석

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-05-16 20:08:351355검색

인터페이스
PHP 클래스는 단일 상속입니다. 즉, 클래스가 여러 클래스의 기능을 요구하는 경우 상속은 무력합니다. 이러한 이유로 PHP는 인터페이스 기술을 도입합니다.

추상 클래스의 모든 메서드가 추상 메서드이고 변수가 선언되지 않고 인터페이스의 모든 멤버가 공개 권한을 갖는 경우 이 특별한 추상 클래스를 인터페이스라고 합니다.

인터페이스는 인터페이스 키워드를 사용하여 정의되며 구현은 완전히 구현되어야 하는 인터페이스 메서드를 구현하는 데 사용됩니다.

인터페이스 구현

다음은 PHP 인터페이스 구현의 실제 예입니다. 여기서는 IPillage라는 인터페이스가 생성되고 구현됩니다.

interface IPillage
{
 function emptyBakAccount();
 function burnDocument();
}

그런 다음 Executive 클래스를 통해 이 인터페이스를 구현합니다.

class Executive extends Employee implements IPillage
{
 private $totalStockOptions;
 function emptyBankAccount()
 {
  echo "Call CFO and ask to transfer funds to Swiss bank account.";
 }
 function burnDocuments()
 {
  echo "Torch the office suite.";
 }
}

회사 내 모든 직급의 사람들이 횡령할 수 있으므로 이 인터페이스를 구현하는 Assistant 클래스가 있을 수 있습니다.

class Assistant extends Employee implements IPillage
{
 function takeMome()
 {
  echo "Taking memo...";
 }
 function emptyBankAccount()
 {
  echo "Go on shopping spree with office credit card.";
 }
 function burnDocuments()
 {
  echo "Start small fire in the trash can.";
 }
}

보시다시피 인터페이스가 특히 유용합니다. 특정 동작을 수행하는 데 필요한 메서드 수와 각 메서드의 이름을 정의하더라도 인터페이스를 사용하면 다양한 클래스에서 이러한 메서드를 다양한 방식으로 구현할 수 있습니다. 이 예에서 파일 굽기 방법의 경우 Assistdnt 클래스는 휴지통에 있는 파일만 굽는 반면 Executive 클래스는 더 극단적인 방법(사무실 굽기)을 수행합니다.

다중 인터페이스 구현

모든 정규직 직원들의 노력으로 회사가 세워졌는데, 외부업체의 회사 침해를 허용한다면 이는 불공평할 것입니다. 즉, 직원에게 일자리를 제공하고 회사 기능을 침해하는 동시에 계약업체가 필요한 작업만 완료하도록 제한하는 방법은 무엇입니까? 해결책은 이러한 작업을 여러 작업으로 나눈 다음 필요한 여러 인터페이스를 구현하는 것입니다. PHPS는 이 기능을 지원합니다. 다음 예를 고려해보세요.

<&#63;php
 interface IEmployee{...}
 interface IDeveloper{...}
 interface IPillage{...}
 class Employee implements IEmployee,IDeveloper,iPillage {
 ...
 }
 class Contractor implements IEmployee,IDeveloper {
 ...
 }
&#63;>


추상 클래스와 인터페이스의 차이점
인터페이스는 모델의 사양으로도 간주될 수 있는 특별한 추상 클래스입니다. 인터페이스와 추상 클래스의 일반적인 차이점은 다음과 같습니다.

서브클래스가 인터페이스를 구현하는 경우(필요 여부에 관계없이) 인터페이스의 모든 메서드를 구현해야 하며, 추상 클래스를 상속하는 경우 필요한 메서드만 구현하면 됩니다.
인터페이스에 정의된 메서드 이름이 변경되면 이 인터페이스를 구현하는 모든 하위 클래스는 메서드 이름을 동기적으로 업데이트해야 하며, 추상 클래스에서 메서드 이름이 변경되면 해당 하위 클래스에 해당하는 메서드 이름은 영향을 받지 않습니다. 새로운 방법이 되다
​​추상 클래스는 단독으로만 상속될 수 있습니다. 하위 클래스가 여러 상위 클래스에서 상속해야 하는 함수를 구현해야 하는 경우 인터페이스를 사용해야 합니다


코드 예시


 <&#63;php 
  
 /** 
  * 声明接口Demo 
  * @author wzy 
  * 
  */ 
 interface Demo 
 { 
  
  const NAME = "wangzhengyi"; 
  
  const AGE = 25; 
  
  function fun1 (); // 声明方法默认是public abstract 
  function fun2 (); 
 } 
  
 /** 
  * 声明接口的继承Demo2 
  * 
  * @author wzy 
  *   
  */ 
 interface Demo2 extends Demo 
 { 
  
  function fun3 (); 
  
  function fun4 (); 
 } 
  
 /** 
  * 声明接口Demo3 
  * 
  * @author wzy 
  *   
  */ 
 interface Demo3 
 { 
  
  function fun5 (); 
  
  function fun6 (); 
 } 
  
 /** 
  * 声明父类ParentClass 
  * 
  * @author wzy 
  *   
  */ 
 class ParentClass 
 { 
  
  function fun7 (); 
 } 
  
 /** 
  * 子类必须实现接口中所有的方法 
  * 
  * @author wzy 
  *   
  */ 
 class ChildClass extends ParentClass implements Demo2, Demo3 
 { 
  
  function fun1 (); 
  
  function fun2 (); 
  
  function fun3 (); 
  
  function fun4 (); 
  
  function fun5 (); 
  
  function fun6 (); 
 } 

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