Computer >> Máy Tính >  >> Lập trình >> PHP

Giao diện đối tượng PHP

Giới thiệu

Giao diện là một tính năng quan trọng của lập trình hướng đối tượng, nhờ đó có thể chỉ định các phương thức được thực thi bởi một lớp mà không cần phải xác định cách chúng được triển khai.

PHP hỗ trợ giao diện theo cách nếu giao diện từ khóa. Giao diện tương tự như lớp nhưng với các phương thức không có phần thân định nghĩa. Các phương thức trong giao diện phải được công khai. Một lớp kế thừa triển khai các phương thức này phải được định nghĩa bằng triển khai từ khóa thay vì từ khóa mở rộng và phải cung cấp triển khai của tất cả các phương thức trong giao diện mẹ.

Cú pháp

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

Tất cả các phương thức từ giao diện phải được xác định bởi lớp triển khai, nếu không trình phân tích cú pháp PHP ném ra ngoại lệ

Ví dụ

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

Đầu ra

Lỗi như hình dưới đây -

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

Giao diện có thể mở rộng

Cũng giống như một lớp bình thường, giao diện cũng có thể được kế thừa từ đó bằng cách sử dụng extension từ khóa.

Trong ví dụ sau, lớp cha có hai phương thức trừu tượng, chỉ một phương thức được định nghĩa lại trong lớp con. Điều này dẫn đến lỗi như sau -

Ví dụ

<?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";
   }
}
?>

Đa kế thừa sử dụng giao diện

PHP không cho phép nhiều hơn một lớp trong mệnh đề mở rộng. Tuy nhiên, có thể đạt được đa kế thừa bằng cách cho phép lớp con triển khai một hoặc nhiều giao diện

Trong ví dụ sau, myclass mở rộng lớp thử nghiệm và triển khai giao diện chứng thực để đạt được đa kế thừa

Ví dụ

<?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();
?>

Đầu ra

Điều này sẽ tạo ra kết quả sau -

implements test1 method
this is test2 function in parent class

Ví dụ về giao diện

Ví dụ

<?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();
?>

Đầu ra

Tập lệnh trên tạo ra kết quả sau

area of circle=78.539816339745
area of rectangle=200