บทนำ
คีย์เวิร์ด final ใช้เพื่อป้องกันการ Override เมธอดหรือการ Extend คลาส:
- final method - ไม่สามารถ Override ได้ใน Child Class
- final class - ไม่สามารถ Extend (สืบทอด) ได้
Syntax
final class MyClass { }
class MyClass {
final public function myMethod() { }
}
ตัวอย่าง: Final Method
พยายาม Override final method จะเกิด Fatal Error:
<?php
class parentclass {
final function test() {
echo "final method in parent class";
}
}
class childclass extends parentclass {
function test() {
echo "overriding final method in parent class";
}
}
$obj = new childclass();
$obj->test();
?>
ผลลัพธ์ (Error)
PHP Fatal error: Cannot override final method parentclass::test()
ตัวอย่าง: Final Class
พยายาม Extend final class จะเกิด Fatal Error:
<?php
final class parentclass {
final function test() {
echo "final method in parent class";
}
}
class childclass extends parentclass {
function test() {
echo "overriding final method in parent class";
}
}
$obj = new childclass();
$obj->test();
?>
ผลลัพธ์ (Error)
PHP Fatal error: Class childclass may not inherit from final class (parentclass)
เมื่อไหร่ควรใช้ final?
- Final Method: เมื่อมี Logic สำคัญที่ไม่ควรเปลี่ยนแปลง เช่น Validation, Security Checks, Core Algorithm
- Final Class: เมื่อออกแบบคลาสให้สมบูรณ์ ไม่ควรถูก Extend เช่น Value Objects, Immutable Classes, Utility Classes
ข้อควรระวัง
- final ไม่ได้ผลกับ Properties (แค่ Methods และ Class)
- Private methods เป็น final โดยนัยแล้ว (เพราะ Child เข้าถึงไม่ได้)
- ใช้ final อย่างมีเหตุผล - ใช้มากเกินไปอาจทำให้ยากต่อการ Extend ในอนาคต