คำหลักสุดท้ายถูกนำมาใช้โดย PHP5 ที่เกี่ยวข้องกับแนวคิดการเขียนโปรแกรมเชิงวัตถุ
แต่ก่อนที่เราจะเข้าสู่รอบชิงชนะเลิศ เราต้องแน่ใจว่าเราเข้าใจแนวคิดเรื่องมรดกเป็นอย่างดีเสียก่อน ในการสืบทอด เราสามารถสืบทอดคลาสจากคลาสอื่นได้ นอกจากนี้ เราสามารถแทนที่ฟังก์ชันในคลาสที่สืบทอดมา เพื่อแทนที่การทำงานเดิมที่มีให้ ในบางกรณี เราอาจต้องป้องกันไม่ให้คลาสถูกสืบทอด หรือเราอาจจำเป็นต้องป้องกันไม่ให้ฟังก์ชันถูกแทนที่ สามารถทำได้ด้วยขั้นสุดท้าย โดยนำหน้าคลาสและฟังก์ชันด้วยคีย์เวิร์ดสุดท้าย ซึ่งทำให้ PHP เกิดข้อผิดพลาดในกรณีที่ไม่มีใครพยายามขยายคลาสสุดท้ายหรือแทนที่ฟังก์ชันสุดท้าย
หมายเหตุ:
เราใช้ได้เฉพาะคีย์เวิร์ดสุดท้ายกับเมธอดและคลาสเท่านั้น
มาสาธิตแนวคิดโดยใช้ตัวอย่างด้านล่าง
ตัวอย่าง:
เราไม่สามารถแทนที่ฟังก์ชันคลาสหลักได้
<?php class BaseClass{ final function calculate($val1,$val2){ $sum = $val1+$val2; echo "Sum of given no=".$sum; } } class ChildClass extends BaseClass{ function calculate($x,$y){ $mult=$val1*$val2; echo "Multiplication of given no=".$mult; } } $obj= new ChildClass(); $obj->show(10,10); ?>
ผลลัพธ์:
PHP Fatal error: Cannot override final method BaseClass::calculate()
คำอธิบาย:
ในตัวอย่างข้างต้นคลาส BaseClass ซึ่งเป็นคลาสหลัก โดยวิธีการคำนวณจะถูกทำเครื่องหมายเป็นขั้นสุดท้าย หมายความว่าเราไม่สามารถแทนที่วิธีการแสดงในคลาสย่อยใด ๆ เพื่อระบุข้อผิดพลาด ChildClass พยายามกำหนดวิธีการสุดท้าย show () สิ่งนี้จะทำให้เกิดข้อผิดพลาดร้ายแรง หมายความว่าวิธีสุดท้ายของคลาสพาเรนต์ไม่สามารถกำหนดในคลาสย่อยได้
ตัวอย่าง:
ใช้คีย์เวิร์ด "Final" Before The Class
<?php final Class BaseClass{ function printData($val1,$val2){ $add=$val1+$val2; echo "Sum of given no=".$s; } } class Child extends BaseClass{ function printData($val1,$val2){ $m=$val1*$val2; echo "Multiplication of given no=".$m; } } $obj= new Child(); $obj->printData(20,20); ?>
ผลลัพธ์:
PHP Fatal error: Class Child may not inherit from final class (BaseClass)
คำอธิบาย:
ในคลาสตัวอย่างข้างต้น BaseClass กำหนดด้วยส่วนสุดท้าย ผลลัพธ์นั้นเราไม่สามารถขยายคลาสนี้ได้ เมื่อคลาส Child พยายามขยายจาก BaseClass (ซึ่งหมายถึง Child เป็นคลาสย่อยของ BaseClass) สำหรับสถานการณ์นี้ PHP จะแสดงข้อความแสดงข้อผิดพลาด “Class Child อาจไม่สืบทอดจากคลาสสุดท้าย (BaseClass)” หมายความว่าจะไม่อนุญาตให้สร้างคลาสย่อยของ BaseClass