Inheritance: การสืบทอดคุณสมบัติ
ในโลกแห่งการเขียนโปรแกรมเชิงวัตถุ (OOP) หนึ่งในแนวคิดที่ทรงพลังและสำคัญที่สุดคือ Inheritance (การสืบทอด) Inheritance ช่วยให้เราสร้าง Class ใหม่โดยอิงจาก Class ที่มีอยู่ ทำให้ Class ใหม่นั้นได้รับคุณสมบัติ (Properties) และพฤติกรรม (Methods) ทั้งหมดจาก Class เดิม เปรียบเสมือนการถ่ายทอด DNA จากพ่อแม่สู่ลูก ทำให้ลูกมีลักษณะบางอย่างที่เหมือนพ่อแม่ แต่ก็สามารถมีลักษณะเฉพาะของตัวเองได้เช่นกัน
ความหมายของ Inheritance
Inheritance คือกระบวนการที่ Class หนึ่ง (เรียกว่า Child Class หรือ Subclass) ได้รับคุณสมบัติและพฤติกรรมทั้งหมดจากอีก Class หนึ่ง (เรียกว่า Parent Class หรือ Superclass หรือ Base Class) Child Class สามารถเพิ่ม Properties และ Methods ใหม่ หรือแก้ไข (Override) Methods ที่สืบทอดมา เพื่อให้เหมาะสมกับความต้องการของตัวเอง
ทำไมต้อง Inheritance?
- Code Reusability (การนำ Code กลับมาใช้ใหม่): ลดความซ้ำซ้อนของ Code โดยการสืบทอดคุณสมบัติและพฤติกรรมจาก Class ที่มีอยู่
- Organization (การจัดระเบียบ): สร้างโครงสร้าง Class ที่ชัดเจนและเป็นระบบ ทำให้ง่ายต่อการบำรุงรักษาและขยาย Code
- Polymorphism (ความสามารถในการปรับเปลี่ยนรูปแบบ): ช่วยให้เราสามารถเขียน Code ที่ทำงานกับ Object ที่แตกต่างกันได้ในลักษณะเดียวกัน (จะอธิบายในบทต่อๆ ไป)
การสร้าง Class ลูก (Child Class)
ใน PHP เราใช้ Keyword extends เพื่อสร้าง Child Class ที่สืบทอดมาจาก Parent Class รูปแบบการใช้งานคือ:
class ChildClass extends ParentClass {
// Properties และ Methods ของ Child Class
}
ตัวอย่าง:
สมมติว่าเรามี Class Animal ที่ represent สัตว์ทั่วไป:
class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function makeSound() {
echo "Generic animal sound\n";
}
}
ตอนนี้เราต้องการสร้าง Class Dog ที่ represent สุนัข ซึ่งเป็นสัตว์ชนิดหนึ่ง เราสามารถใช้ Inheritance เพื่อสืบทอดคุณสมบัติและพฤติกรรมจาก Class Animal ได้:
class Dog extends Animal {
public function makeSound() {
echo "Woof!\n";
}
}
ในตัวอย่างนี้ Class Dog สืบทอด Property $name และ Method __construct() จาก Class Animal นอกจากนี้ Class Dog ยัง Override Method makeSound() เพื่อให้สุนัขส่งเสียง "Woof!" แทนเสียงทั่วไปของสัตว์
การสืบทอด Properties และ Methods
เมื่อ Child Class สืบทอดมาจาก Parent Class Child Class จะได้รับ Properties และ Methods ทั้งหมดจาก Parent Class ยกเว้น Properties และ Methods ที่ถูกกำหนดให้เป็น private (เราได้เรียนรู้เรื่อง Access Modifiers ในบทที่แล้ว)
ตัวอย่าง:
$myDog = new Dog("Buddy");
echo $myDog->name . "\n"; // Output: Buddy
$myDog->makeSound(); // Output: Woof!
จากตัวอย่างข้างต้น เราสามารถเข้าถึง Property $name และเรียก Method makeSound() ของ Object $myDog ได้ แม้ว่า Property $name จะถูกกำหนดไว้ใน Class Animal และ Method makeSound() ถูก Override ใน Class Dog
การสืบทอด Properties ที่เป็น Protected:
ถ้า Property ใน Parent Class ถูกกำหนดเป็น protected จะหมายความว่า Property นั้นสามารถเข้าถึงได้จาก Class นั้นเอง และจาก Child Class ที่สืบทอดมาจาก Class นั้น
class Animal {
protected $weight;
public function setWeight($weight){
$this->weight = $weight;
}
public function getWeight(){
return $this->weight;
}
}
class Dog extends Animal {
public function displayWeight(){
echo "Dog weight: " . $this->weight . "\n"; // สามารถเข้าถึง $weight ได้
}
}
$dog = new Dog();
$dog->setWeight(15);
$dog->displayWeight(); // Output: Dog weight: 15
ข้อควรระวัง:
- การสืบทอดมากเกินไปอาจทำให้ Code ซับซ้อนและยากต่อการบำรุงรักษา พยายามใช้ Inheritance เฉพาะเมื่อมีความสัมพันธ์ "is-a" ที่ชัดเจน (เช่น Dog is an Animal)
- ระวังการ Override Methods มากเกินไป อาจทำให้พฤติกรรมของ Class เปลี่ยนแปลงไปจากที่คาดหวัง
สรุป
Inheritance เป็นเครื่องมือที่มีประโยชน์สำหรับการสร้าง Code ที่สามารถนำกลับมาใช้ใหม่ได้ จัดระเบียบได้ดี และง่ายต่อการบำรุงรักษา การเข้าใจ Inheritance เป็นสิ่งสำคัญสำหรับการเขียนโปรแกรมเชิงวัตถุใน PHP และภาษาอื่นๆ อย่างมีประสิทธิภาพ ในบทต่อไป เราจะเรียนรู้เกี่ยวกับ Parent Class และ Child Class ในรายละเอียดมากขึ้น รวมถึงวิธีการ Override Methods และการใช้ Keyword parent