"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > स्टेटिक मेथड कॉल में विस्तारित PHP क्लास से क्लास का नाम कैसे प्राप्त करें?

स्टेटिक मेथड कॉल में विस्तारित PHP क्लास से क्लास का नाम कैसे प्राप्त करें?

2024-11-10 को प्रकाशित
ब्राउज़ करें:938

How to Get the Class Name from an Extended PHP Class in a Static Method Call?

विस्तारित PHP क्लास स्टेटिक कॉल से क्लास का नाम प्राप्त करना

ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, कक्षाएं अक्सर अपनी कार्यक्षमता को प्राप्त करने और विस्तारित करने के लिए बेस क्लास का विस्तार करती हैं . एक सामान्य परिदृश्य में एक विस्तारित वर्ग में स्थिर विधि कॉल से वर्ग का नाम प्राप्त करने की आवश्यकता शामिल होती है, इस तथ्य के बावजूद कि CLASS हमेशा परिभाषित वर्ग का नाम लौटाता है।

समस्या: मूल स्थैतिक विधियों में कक्षा के नाम की अनुपलब्धता

दो वर्गों वाले परिदृश्य पर विचार करें, Action और MyAction, जहां MyAction Action का विस्तार करता है। कार्रवाई एक स्थिर विधि को परिभाषित करता है, n(), जो मूल स्थिर तरीकों के भीतर क्लास स्थिरांक के माध्यम से पहुंच योग्य नहीं है, जिसके परिणामस्वरूप क्लास कॉलिंग की परवाह किए बिना मान को "एक्शन" पर सेट किया जा रहा है कक्षा।

समाधान:

1. लेट स्टेटिक बाइंडिंग (PHP 5.3):

लेट स्टैटिक बाइंडिंग आपको विधि परिभाषित होने के बजाय रनटाइम पर स्टैटिक विधि कॉल के लक्ष्य वर्ग को निर्धारित करने की अनुमति देती है। इसे get_called_class() फ़ंक्शन का उपयोग करके प्राप्त किया जाता है, जो उस वर्ग का नाम लौटाता है जिसमें स्थिर विधि को बुलाया गया था।

उदाहरण के लिए:

class Action {
    public static function n() {
        return get_called_class();
    }
}

class MyAction extends Action {

}

echo MyAction::n(); // Outputs "MyAction"

2। get_class($this) (केवल गैर-स्थिर तरीके) का उपयोग करना:

यदि प्रश्न में विधि स्थिर नहीं है, तो आप वर्ग प्राप्त करने के लिए get_class($this) का उपयोग कर सकते हैं वह नाम जिससे विधि बुलाई गई थी।

उदाहरण के लिए:

class Action {
    public function n() {
        echo get_class($this);
    }
}

class MyAction extends Action {

}

$foo = new MyAction;
$foo->n(); // Outputs "MyAction"

निष्कर्ष:

देर से स्थिर बाइंडिंग और get_class($this) दोनों एक स्थिर विधि कॉल से क्लास का नाम पुनर्प्राप्त करने के लिए समाधान प्रदान करते हैं विस्तारित कक्षा. स्थैतिक तरीकों के लिए देर से स्थैतिक बाइंडिंग बेहतर होती है, जबकि get_class($this) गैर स्थैतिक तरीकों के लिए उपयोगी है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3