Computer >> 컴퓨터 >  >> 프로그램 작성 >> PHP

PHP 객체 인터페이스

<시간/>

소개

인터페이스는 구현 방법을 정의하지 않고도 클래스에서 구현할 메서드를 지정할 수 있는 객체 지향 프로그래밍의 중요한 기능입니다.

PHP는 인터페이스인 경우 인터페이스를 지원합니다. 예어. 인터페이스는 클래스와 비슷하지만 정의 본문이 없는 메서드가 있습니다. 인터페이스의 메소드는 공개되어야 합니다. 이러한 메서드를 구현하는 상속된 클래스는 구현으로 정의해야 합니다. extends 키워드 대신 키워드를 사용하고 상위 인터페이스에서 모든 메소드의 구현을 제공해야 합니다.

구문

<?php
interface testinterface{
   public function testmethod();
}
class testclass implements testinterface{
   public function testmethod(){
      echo "implements interfce method";
   }
}
?>

인터페이스의 모든 메소드는 구현 클래스에서 정의해야 합니다. 그렇지 않으면 PHP 파서에서 예외가 발생합니다.

예시

<?php
interface testinterface{
   public function test1();
   public function test2();
}
class testclass implements testinterface{
   public function test1(){
      echo "implements interface method";
   }
}
$obj=new testclass()
?>

출력

오류는 아래와 같습니다 -

PHP Fatal error: Class testclass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (testinterface::test2)

확장 가능한 인터페이스

일반 클래스와 마찬가지로 extens를 사용하여 인터페이스도 상속할 수 있습니다. 키워드.

다음 예제에서 부모 클래스에는 두 개의 추상 메서드가 있으며 그 중 하나만 자식 클래스에서 재정의됩니다. 이로 인해 다음과 같은 오류가 발생합니다. -

예시

<?php
interface testinterface{
   public function test1();
}
interface myinterface extends testinterface{
   public function test2();
}
class testclass implements myinterface{
   public function test1(){
      echo "implements test1 method";
   }
   public function test2(){
      echo "implements test2 method";
   }
}
?>

인터페이스를 사용한 다중 상속

PHP는 extends 절에서 둘 이상의 클래스를 허용하지 않습니다. 그러나 자식 클래스가 하나 이상의 인터페이스를 구현하도록 하여 다중 상속을 달성할 수 있습니다.

다음 예제에서 myclass는 testclass를 확장하고 다중 상속을 달성하기 위해 testinterface를 구현합니다.

예시

<?php
interface testinterface{
   public function test1();
}
class testclass{
   public function test2(){
      echo "this is test2 function in parent class\n";
   }
}
class myclass extends testclass implements testinterface{
   public function test1(){
      echo "implements test1 method\n";
   }
}
$obj=new myclass();
$obj->test1();
$obj->test2();
?>

출력

이것은 다음과 같은 출력을 생성합니다 -

implements test1 method
this is test2 function in parent class

인터페이스 예

예시

<?php
interface shape{
   public function area();
}
class circle implements shape{
   private $rad;
   public function __construct(){
      $this->rad=5;
   }
   public function area(){
      echo "area of circle=" . M_PI*pow($this->rad,2) ."\n";
   }
}
class rectangle implements shape{
   private $width;
   private $height;
   public function __construct(){
      $this->width=20;
      $this->height=10;
   }
   public function area(){
      echo "area of rectangle=" . $this->width*$this->height ."\n";
   }
}
$c=new circle();
$c->area();
$r=new rectangle();
$r->area();
?>

출력

위의 스크립트는 다음 결과를 생성합니다.

area of circle=78.539816339745
area of rectangle=200