PHP में final कीवर्ड
PHP में **final** कीवर्ड **मेथड्स** और **क्लासेस** के लिए उपयोग किया जाता है:
- मेथड्स के लिए: मेथड **ओवरराइडिंग रोकता है**।
- क्लासेस के लिए: **विरासत (इनहेरिटेंस) रोकता है**।
उदाहरण 1: फाइनल मेथड
<?php
class Base {
final public function display() {
echo "बेस क्लास फ़ंक्शन फाइनल घोषित!";
}
public function demo() {
echo "बेस क्लास फ़ंक्शन!";
}
}
class Derived extends Base {
public function demo() {
echo "डेराइव्ड क्लास फ़ंक्शन!";
}
// display() को ओवरराइड करने का प्रयास → फैटल एरर
}
$ob = new Derived();
$ob->demo(); // डेराइव्ड क्लास फ़ंक्शन!
?>
आउटपुट
डेराइव्ड क्लास फ़ंक्शन!
उदाहरण 2: फाइनल क्लास
<?php
final class Base {
final public function display() {
echo "बेस क्लास फ़ंक्शन फाइनल घोषित!";
}
public function demo() {
echo "बेस क्लास फ़ंक्शन!";
}
}
class Derived extends Base { // फैटल एरर: फाइनल क्लास से विरासत नहीं ले सकते
public function demo() {
echo "डेराइव्ड क्लास फ़ंक्शन!";
}
}
$ob = new Derived();
$ob->demo();
?>
आउटपुट (त्रुटि)
PHP Fatal error: Class Derived may not inherit from final class (Base) in ... on line 19
उपयोग के मामले
- फाइनल मेथड: जब आप चाहते हैं कि एक महत्वपूर्ण मेथड का व्यवहार चाइल्ड क्लासेस में न बदले (जैसे सिक्योरिटी चेक, कोर एल्गोरिदम)।
- फाइनल क्लास: जब क्लास को एक्सटेंड करने के लिए डिज़ाइन नहीं किया गया है (जैसे वैल्यू ऑब्जेक्ट्स, DTOs, कुछ लाइब्रेरी क्लासेस)।
- प्रदर्शन: फाइनल मेथड्स इंजन को ऑप्टिमाइज़ेशन (इनलाइनिंग, डिवर्चुअलाइज़ेशन) की अनुमति देते हैं।
नोट
- प्रॉपर्टीज़ `final` नहीं हो सकतीं (PHP 8.1+ में `readonly` प्रॉपर्टीज़ का उपयोग करें)।
- कंस्ट्रक्टर `final` हो सकते हैं (ऑब्जेक्ट निर्माण नियंत्रण के लिए)।
- इंटरफेस मेथड्स डिफ़ॉल्ट रूप से फाइनल नहीं होते जब तक कि क्लास में कार्यान्वित न हों।