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

PHP की `__get` और `__set` जादुई विधियाँ वास्तव में कब लागू की जाती हैं?

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

When are PHP's `__get` and `__set` magic methods actually invoked?

PHP मैजिक तरीके: प्रॉपर्टी ओवरलोडिंग के लिए __get और __set का अनावरण

PHP में, __get और __set मैजिक तरीके संभालने का एक वैकल्पिक तरीका प्रदान करते हैं पारंपरिक गेटर्स और सेटर्स से परे संपत्ति तक पहुंच और संशोधन। जब अनुरोधित संपत्ति स्पष्ट रूप से परिभाषित नहीं होती है तो ये विधियां डेवलपर्स को संपत्ति पहुंच के व्यवहार को रोकने और अनुकूलित करने में सक्षम बनाती हैं।

हालांकि, एक आम गलतफहमी यह है कि __get और __set विधियों का उपयोग get और set कीवर्ड को ओवरलोड करने के लिए किया जाता है। यह पूरी तरह से सटीक नहीं है। अन्य भाषाओं में विधियाँ. PHP स्पष्ट रूप से सार्वजनिक, संरक्षित और निजी संपत्ति घोषणाओं के माध्यम से संपत्ति पहुंच को संभालती है। यदि किसी संपत्ति को किसी दिए गए दायरे में घोषित नहीं किया गया है, तो PHP एक त्रुटि उत्पन्न करेगा।

जब PHP स्पष्ट रूप से घोषित नहीं की गई संपत्ति तक पहुंचने का प्रयास करता है तो जादुई तरीके काम में आते हैं। इस मामले में, __get और __set विधियां संपत्ति पहुंच को गतिशील रूप से संभालने का एक तरीका प्रदान करती हैं।

__get और __set का उपयोग करना

__get और __set विधियों के उपयोग को स्पष्ट करने के लिए, निम्नलिखित उदाहरण पर विचार करें:

class foo { सार्वजनिक $बार; // सार्वजनिक संपत्ति सार्वजनिक फ़ंक्शन __get($नाम) { प्रतिध्वनि "प्राप्त करें:$नाम"; वापसी $यह->$नाम; // दुर्गम संपत्तियों तक पहुँचने के लिए कस्टम व्यवहार } सार्वजनिक फ़ंक्शन __सेट($नाम, $मूल्य) { इको "सेट:$नाम से $मूल्य"; $यह->$नाम = $मूल्य; // दुर्गम गुणों को सेट करने के लिए कस्टम व्यवहार } }इस परिदृश्य में, __get और __set तरीकों को $bar प्रॉपर्टी तक पहुंचने या संशोधित करते समय कस्टम व्यवहार प्रदान करने के लिए डिज़ाइन किया गया है। उदाहरण के लिए, echo $foo->bar; __get विधि को ट्रिगर करेगा, जबकि $foo->bar = 'test'; इसमें __सेट विधि शामिल होगी।

डिबगिंग और सामान्य नुकसान
class foo {
    public $bar;  // Public property
    public function __get($name) {
        echo "Get:$name";
        return $this->$name;  // Custom behavior for accessing inaccessible properties
    }
    public function __set($name, $value) {
        echo "Set:$name to $value";
        $this->$name = $value;  // Custom behavior for setting inaccessible properties
    }
}

हालांकि, जैसा कि मूल प्रश्न में वर्णित है, यदि संपत्ति पहले से ही सार्वजनिक रूप से घोषित की गई है (जैसा कि इस उदाहरण में है) , PHP रनटाइम सीधे उस प्रॉपर्टी तक पहुंच जाएगा। इसलिए, __get और __set तरीकों को लागू नहीं किया जाएगा।

इस व्यवहार की पुष्टि प्रॉपर्टी ओवरलोडिंग पर PHP मैनुअल के अनुभाग में की गई है, जिसमें कहा गया है कि __set और __get तरीकों को केवल दुर्गम गुणों के लिए डेटा लिखते या पढ़ते समय ही बुलाया जाता है। सार्वजनिक संपत्ति नहीं।सामान्य तौर पर, जादुई तरीकों को उचित गेटर और सेटर फ़ंक्शन या प्रत्यक्ष विधि कॉल के प्रतिस्थापन के रूप में नहीं देखा जाना चाहिए। वे मुख्य रूप से अमान्य संपत्ति पहुंच से निपटने और ऐसे परिदृश्यों में वैकल्पिक व्यवहार प्रदान करने के उद्देश्य से सेवा प्रदान करते हैं। इसके अतिरिक्त, यह ध्यान रखना महत्वपूर्ण है कि जादू के तरीकों के परिणामस्वरूप प्रत्यक्ष संपत्ति पहुंच की तुलना में प्रदर्शन दंड हो सकता है। संपत्ति तक पहुंच और संशोधन। यह दृष्टिकोण अधिक कुशल है और संपत्ति पहुंच शब्दार्थ पर अधिक नियंत्रण प्रदान करता है।

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

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

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

Copyright© 2022 湘ICP备2022001581号-3