फाइनल कीवर्ड 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 जो पैरेंट क्लास है। जिसमें calculate मेथड को फाइनल के रूप में चिह्नित किया गया है। इसका तात्पर्य है कि हम इसकी किसी भी चाइल्ड क्लास में show मेथड को ओवरराइड नहीं कर सकते। एरर की पहचान करने के लिए ChildClass फाइनल मेथड show () को परिभाषित करने का प्रयास कर रहा है। यह एक फेटल एरर उत्पन्न करेगा, इसका तात्पर्य है कि पैरेंट क्लास का फाइनल मेथड इसकी चाइल्ड क्लास में परिभाषित नहीं किया जा सकता।
उदाहरण:
क्लास से पहले "Final" कीवर्ड का उपयोग
<?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 may not inherit from the final class (BaseClass)"। इसका तात्पर्य है कि यह BaseClass की कोई चाइल्ड क्लास बनाने की अनुमति नहीं देगा।