PHP Abstract Classes

Abstract class คือคลาสที่เป็นนามมธรรม ไม่ได้ใช้งานจริง เพียงแต่เป็นเหมือนคลาสต้นแบบให้กับคลาสย่อย โดยการสร้างคลาสนามธรรมใช้คีย์เวิร์ด  abstract 

 

ไวยากรณ์

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

 

กฎของการสืบทอดจากคลาสนามธรรม

  • คลาสย่อยจะต้องกำหนดชื่อเมธอดเดียวกันกับคลาสแม่ที่เป็นนามธรรม
  • คลาสย่อยจะต้องกำหนดการเข้าถึงเหมือนกัน หรือ น้อยกว่าคลาสแม่ที่เป็นนามธรรมตัวอย่างเช่น คลาสนามธรรมกำหนดการเข้าถึงเป็น protected คลาสที่ได้รับสืบถอดจะต้องกำหนดการเข้าเป็น protected หรือ public แต่ไม่ใช่ private 
  • จำนวนอาร์กิวเมนต์ที่ต้องการต้องเหมือนกัน อย่างไรก็ตามคลาสย่อยอาจมีอาร์กิวเมนต์เสริมเพิ่มเติม 

 

ตัวอย่างที่ 1 

<?php
//คลาสแม่
abstract class Animal {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function title() : string; 
}

// คลาสลูก
class Ant extends Animal {
  public function title() : string {
    return "ฉันคือ $this->name!"; 
  }
}

class Bird extends Animal {
  public function title() : string {
    return "ส่วนฉันคือ $this->name!"; 
  }
}


$ant = new Ant("มด");
echo $ant->title();
echo "<br>";

$bird = new Bird("นก");
echo $bird->title();
echo "<br>";

?>

ไฟล์ที่ 1 คลาสนามธรรม

 

ตัวอย่างที่ 2

<?php

abstract class Car{
    abstract protected function typeCar($name);
}

class SubCar extends Car{
    public function typeCar($name){
    	if($name == "car"){
        	$type = "รถ 4 ล้อ";
        }
        else{
        	$type = "รถตั้งแต่ 6 ล้อขึ้นไป";
        }
        
       	return "{$name}  {$type}";
    }

}

$car = new SubCar();
echo $car->typeCar("car");

echo "<br>";

$truck = new SubCar();
echo $truck->typeCar("truck");


?>

ไฟล์ที่ 2 คลาสนามธรรม 2

จากไฟล์ที่ 2

  • เป็นการสร้างคลาสนามธรรมชื่อ Car โดยกำหนดวิธีการไว้ 1 อย่าง
  • สร้างคลาสย่อยที่สืบทอดจากคลาส Car ชื่อว่า SubCar 
  • ภายในคลาสย่อยสร้างเมธอดเดียวกันกับคลาสแม่ และสร้างเงื่อนไขในการแสดงข้อมูล  

หากคุณพบคำที่สะกดผิด เว้นวรรคไม่ถูกต้อง ฯ โปรดแจ้งให้เราทราบ โดยลากคลุม (highlight) ข้อความนั้น แล้วกด Ctrl + Enter

ไม่สามารถคัดลอกเนื้อหานี้

Spelling error report

The following text will be sent to our editors: