PHP 5 มี OOP model Abstract Class เป็นคลาสที่ประกาศด้วยคีย์เวิร์ด abstract มี abstract methods อย่างน้อย 1 เมธอด Abstract method มีแค่ชื่อและ arguments ไม่มี body
ไม่สามารถสร้าง object จาก abstract class ได้ ต้อง extend เป็น child class implement body ของ abstract methods แล้วค่อยสร้าง object จาก child class
ข้อสำคัญของ Abstract Class
1. มี abstract และ non-abstract methods ร่วมได้
<?php
abstract class base {
abstract function printdata();
public function getdata() { echo "Tutorials Point"; }
}
class child extends base {
public function printdata(){ echo "Good morning"; }
}
$obj = new child();
$obj->getdata();
?>
Output: Tutorials Point
2. ไม่สามารถ instantiate โดยตรงได้
<?php
abstract class AbstractClass {
abstract protected function calculate();
public function adddata() { echo "Addition done"; }
}
$obj = new AbstractClass(); // Fatal Error
?>
3. Visibility ต้องเหมือนหรือน้อยกว่า (less restricted)
Child class ต้อง implement abstract methods ด้วย visibility เหมือนหรือ public กว่า (protected -> public ได้ แต่ private ไม่ได้)
4. Abstract method ห้ามมี body
Abstract method ประกาศ signature เท่านั้น ห้ามมีโค้ดใน body
5. คลาสที่มี abstract method อย่างน้อย 1 ตัว ต้องประกาศเป็น abstract class
6. Abstract class ไม่รองรับ multiple inheritance
PHP ไม่รองรับ multiple inheritance เพื่อป้องกัน ambiguity (Diamond Problem)
หมายเหตุ
Abstract class สามารถ extend abstract class อื่นได้ และ implement interface ได้