Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

อธิบายคลาสสุดท้ายและวิธีการสุดท้ายใน PHP


คำหลักสุดท้ายถูกนำมาใช้โดย 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