Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP में लेट स्टैटिक बाइंडिंग (Late Static Bindings) क्या है?

PHP में **लेट स्टैटिक बाइंडिंग (Late Static Binding - LSB)** एक ऐसी सुविधा है जो विरासत (inheritance) में static:: कीवर्ड का उपयोग करके **रनटाइम पर** कॉल की गई क्लास को संदर्भित करने की अनुमति देती है, बजाय उस क्लास के जहां मेथड परिभाषित है।

समस्या: self:: का व्यवहार

self:: हमेशा उस क्लास को संदर्भित करता है जहां कोड **लिखा गया है** (कंपाइल-टाइम), न कि जिसे **कॉल किया गया है** (रनटाइम)।

उदाहरण: समस्या प्रदर्शन

<?php
class Student {
    public static $my_name = 'Joe';
    public static function getName() {
        return "The name of the student is: " . self::$my_name;
    }
    public static function getAge() {
        echo self::getName(); // self:: यहाँ Student को संदर्भित करता है
    }
}

class Professor extends Student {
    public static function getName() {
        return "The name of the student is: " . self::$my_name . " and age is 24.";
    }
}

Student::getAge();   // आउटपुट: The name of the student is: Joe
Professor::getAge(); // आउटपुट: The name of the student is: Joe (Professor का getName नहीं बुलाया गया!)
?>

समाधान: static:: (लेट स्टैटिक बाइंडिंग)

<?php
class Student {
    public static $my_name = 'Joe';
    public static function getName() {
        return "The name of the student is: " . self::$my_name;
    }
    public static function getAge() {
        echo static::getName(); // static:: रनटाइम क्लास को संदर्भित करता है
    }
}

class Professor extends Student {
    public static function getName() {
        return "The name of the student is: " . self::$my_name . " and age is 24.";
    }
}

Student::getAge();   // The name of the student is: Joe
Professor::getAge(); // The name of the student is: Joe and age is 24. (Professor::getName बुलाया गया!)
?>

मुख्य अंतर

कीवर्डबाइंडिंग समयसंदर्भित करता है
self::कंपाइल-टाइम (प्रारंभिक बाइंडिंग)वह क्लास जहां मेथड परिभाषित है
static::रनटाइम (लेट बाइंडिंग)वह क्लास जिसे वास्तव में कॉल किया गया
$this->रनटाइमवर्तमान ऑब्जेक्ट इंस्टेंस (नॉन-स्टैटिक)

अन्य उपयोग: static:: प्रॉपर्टीज़ के लिए

<?php
class A {
    public static $val = 'A';
    public static function show() {
        echo static::$val; // लेट स्टैटिक बाइंडिंग प्रॉपर्टी पर भी लागू
    }
}
class B extends A {
    public static $val = 'B';
}
A::show(); // A
B::show(); // B
?>

महत्वपूर्ण नोट्स

  • PHP 5.3.0+ में उपलब्ध।
  • static:: केवल स्टैटिक संदर्भ में काम करता है (स्टैटिक मेथड/प्रॉपर्टी)।
  • get_called_class() फ़ंक्शन कॉल की गई क्लास का नाम स्ट्रिंग के रूप में लौटाता है।
  • फैक्ट्री पैटर्न, एक्टिव रिकॉर्ड, ORM बेस क्लासेस में व्यापक रूप से उपयोगी।
  1. PHP फ़ाइल क्या है? PHP फ़ाइल क्या है?

    .PHP फ़ाइल एक्सटेंशन वाली फ़ाइल एक PHP सोर्स कोड फ़ाइल है जिसमें हाइपरटेक्स्ट प्रीप्रोसेसर कोड होता है। इनका उपयोग अक्सर वेब पेज फ़ाइलों के रूप में किया जाता है जो आमतौर पर वेब सर्वर पर चल रहे PHP इंजन से HTML उत्पन्न करती हैं। PHP इंजन द्वारा कोड से बनाया गया HTML कंटेंट वही है जो वेब ब्राउज़र में

  1. - Java में क्लास/स्टैटिक मेथड्स क्या हैं?

    क्लास/स्टैटिक मेथड्स वे मेथड्स हैं जिन्हें क्लास पर ही कॉल किया जाता है, किसी विशेष ऑब्जेक्ट इंस्टेंस पर नहीं। स्टैटिक मॉडिफायर यह सुनिश्चित करता है कि इम्प्लीमेंटेशन सभी क्लास इंस्टेंस में समान है। क्लास/स्टैटिक मेथड्स को इंस्टेंटिएशन के बिना कॉल किया जाता है, जिसका अर्थ है कि स्टैटिक मेथड्स केवल क

  1. - पायथन क्लास में स्टेटिक मेथड्स क्या हैं?

    किसी भी पायथन क्लास में तीन प्रकार के मेथड्स होते हैं: इंस्टेंस मेथड्स, क्लास मेथड्स और स्टेटिक मेथड्स।उदाहरणनिम्न कोड पर विचार करें:class OurClass:\n def method(self):\n return instance method called, self\n @classmethod\n def classmethod(cls):\n return class method called, c