คุณสมบัติอีกอย่างที่สำคัญของการเขียนโปรแกรมเชิงวัตถุคือการสืบทอด(Inheritance) โดยคลาส(Class) หนึ่งสามารถสืบทอดจากอีกคลาส(Class) ได้ โดยใช้ keyword ว่า extends ซึ่งคลาสที่สืบทอดไปแล้วนั้นจะมีคุณสมบัติ(Property) และ พฤติกรรม(Method) เหมือนคลาสแม่ทุกประการ ยกเว้นการกำหนด encapsulation หรือการห่อหุ้ม ที่เป็น private ซึ่จะกล่าวถึง การห่อหุ้ม(Encapsulation) ในลำดับต่อไป
ตัวอย่างการสืบทอด(Inheritance)
<?php
class A
{
public $var = 'Hello';
public function sayHello()
{
echo $this->var;
}
}
//class B สืบทอดจาก class A
class B extends A
{
}
//สร้าง object
$obj = new B();
$obj->sayHello();
จะเห็นว่า class B สืบทอด(extends) มาจาก class A ซึ่ง class B ไม่มี คุณสมบัติ(Property) และพฤติกรรม(Method) ใดๆ เลย แต่เราสามารถสร้างวัตถุ(Object) จาก class B และสามารถเรียกพฤติกรรม(Method) จาก class B ได้ เพราะ class B สืบทอดมาจาก class A หมายความว่า class A กำหนดอะไรไว้ class B ก็จะมีเหมือนกัน
และนอกจากนั้นใน class B สามารถเพิ่มคุณสมบัติ(Property) และพฤติกรรม(Method) เพิ่มเติมที่นอกเหนือจาก class A ได้อีกด้วย พูดง่ายๆ ว่า class B ซึ่งเป็น class ลูก มีความสามารถนอกเหนือจาก class A ซึ่งเป็น class แม่ได้เช่น
<?php
class A
{
public $var = 'Hello';
public function sayHello()
{
echo $this->var;
}
}
//class B สืบทอดจาก class A
class B extends A
{
public $var2 = 'World';
public function sayWorld()
{
echo $this->var2;
}
}
//สร้าง object
$obj = new B();
$obj->sayHello();
$obj->sayWorld();
// HelloWorld
ดังนั้นไม่ต้องตกใจว่าทำไมบางทีเวลาเรียกพฤติกรรม(Method) นี้ไม่มีในคลาส(Class) ที่เรากำลังใช้งานอยู่ ต้องดูว่าในคลาส(Class) แม่ที่สืบทอดมานั้นมีหรือเปล่านั่นเอง
การสืบทอดนั้นสามารถสืบทอดได้ไม่จำกัดจำนวนชั้นของคลาส(Class) เช่นอาจมีทั้ง ลูก หลาน เหลน โหลน ก็ได้
Reference site: http://php.net/manual/en/language.oop5.inheritance.php
ความคิดเห็น