PHP में ओवरराइडिंग विधि पैरामीटर: सख्त मानकों का उल्लंघन
ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, लिस्कोव प्रतिस्थापन सिद्धांत (एलएसपी) यह निर्देशित करता है किसी उपप्रकार की वस्तुएं प्रोग्राम के व्यवहार में बदलाव किए बिना अपनी मूल वस्तुओं को प्रतिस्थापित कर सकती हैं। हालाँकि, PHP में, एक अलग पैरामीटर हस्ताक्षर के साथ एक विधि को ओवरराइड करना सख्त मानकों का उल्लंघन माना जाता है।
यह उल्लंघन क्यों है?
PHP एक कमजोर टाइप है भाषा, जिसका अर्थ है कि कंपाइलर कंपाइल समय पर किसी वेरिएबल का सटीक प्रकार निर्धारित नहीं कर सकता है। इसका मतलब यह है कि जब कोई चाइल्ड क्लास पैरेंट क्लास विधि को ओवरराइड करता है, तो कंपाइलर यह सत्यापित नहीं कर सकता है कि नया हस्ताक्षर मूल के साथ संगत है।
परिणामस्वरूप, कंपाइलर एक संभावित समस्या को चिह्नित करते हुए एक सख्त मानक चेतावनी जारी करता है। प्रोग्राम के टूटने का कारण हो सकता है।
निम्न उदाहरण पर विचार करें:
class Foo
{
public function bar(array $bar) {}
}
class Baz extends Foo
{
public function bar($bar) {}
}
इस कोड में, Baz::bar() विधि एक अलग हस्ताक्षर के साथ Foo::bar() विधि को ओवरराइड करती है। कंपाइलर यह निर्धारित नहीं कर सकता है कि नया हस्ताक्षर मूल के साथ संगत है या नहीं, संभावित रूप से लाइन के नीचे समस्याएं पैदा कर रहा है। हस्ताक्षर, वांछित कार्यक्षमता प्राप्त करने के लिए वैकल्पिक दृष्टिकोण हैं:
फ़ंक्शन ओवरलोडिंग:
एक ही नाम लेकिन अलग-अलग हस्ताक्षर के साथ अलग-अलग फ़ंक्शन को परिभाषित करें। यह आपको एक ही फ़ंक्शन को कई परिभाषाओं के साथ ओवरलोड करने की अनुमति देता है।रचना:
विभिन्न वर्गों की कार्यक्षमता को उनके तरीकों को संशोधित किए बिना संयोजित करने के लिए वंशानुक्रम के बजाय संरचना का उपयोग करें।अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3