Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

PHP Object Interfaces


แนะนำตัว

อินเทอร์เฟซเป็นคุณลักษณะที่สำคัญของการเขียนโปรแกรมเชิงวัตถุ โดยสามารถระบุวิธีการที่จะนำไปใช้โดยชั้นเรียน โดยไม่ต้องกำหนดว่าควรใช้งานอย่างไร

PHP รองรับอินเทอร์เฟซโดยวิธีถ้า อินเทอร์เฟซ คำสำคัญ. อินเทอร์เฟซคล้ายกับคลาส แต่มีเมธอดที่ไม่มีเนื้อหาคำจำกัดความ วิธีการในส่วนต่อประสานจะต้องเป็นแบบสาธารณะ คลาสที่สืบทอดมาซึ่งใช้วิธีการเหล่านี้ต้องกำหนดด้วย การใช้งาน คีย์เวิร์ดแทนที่จะขยายคีย์เวิร์ด และต้องจัดเตรียมการใช้งานเมธอดทั้งหมดในอินเทอร์เฟซหลัก

ไวยากรณ์

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

เมธอดทั้งหมดจากอินเทอร์เฟซต้องถูกกำหนดโดยคลาสการนำ มิฉะนั้น PHP parser จะส่งข้อยกเว้น

ตัวอย่าง

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

อินเทอร์เฟซที่ขยายได้

เช่นเดียวกับคลาสปกติ อินเทอร์เฟซยังสามารถสืบทอดโดยใช้ ขยาย คำสำคัญ

ในตัวอย่างต่อไปนี้ คลาสพาเรนต์มีเมธอดนามธรรมสองเมธอด ซึ่งมีเพียงหนึ่งเมธอดที่กำหนดใหม่ในคลาสย่อย ซึ่งส่งผลให้เกิดข้อผิดพลาดดังต่อไปนี้ -

ตัวอย่าง

<?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 ไม่อนุญาตให้มีมากกว่าหนึ่งคลาสในส่วนคำสั่งขยาย อย่างไรก็ตาม การสืบทอดหลายรายการสามารถทำได้โดยให้คลาสลูกใช้อินเทอร์เฟซอย่างน้อยหนึ่งอินเทอร์เฟซ

ในตัวอย่างต่อไปนี้ 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