दिलचस्प पोस्ट
एक निरर्थक स्ट्रिंग क्या है? HTTP स्थिति कोड 0 – यह लाने के लिए क्या मतलब है, या XMLHttpRequest? UIHebView ऊंचाई को सामग्री के आधार पर निर्धारित करने के लिए, एक चर ऊंचाई UITableView के भीतर? बिल्ली का बेकार उपयोग? जावा ME में ऑब्जेक्ट करने के लिए JSON स्ट्रिंग कन्वर्ट? जावास्क्रिप्ट / HTML5 में ध्वनि प्रभाव इनपुट के अनुसार गतिशील दो आयाम सरणी लिनक्स में प्रति प्रक्रिया की अधिकतम संख्या है? हाइबरनेट मानदंड FetchType.EAGER के साथ कई बार बच्चों को रिटर्न देता है एचटीएमएल स्क्रैपिंग के लिए विकल्प? पायथन सेलेनियम वेब ड्रिवर मेरी अपनी उम्मीद की स्थिति लेखन किसी रूप में कहीं और संदर्भ चर और ऑब्जेक्ट PHP – SSL प्रमाणपत्र त्रुटि: स्थानीय जारीकर्ता प्रमाणपत्र प्राप्त करने में असमर्थ वेबब्राउज़र पूर्ण पृष्ठ लोड हो रहा है म्यूटक्स लॉक किए बिना pthread_cond_signal को कॉल करना

फ़ंक्शन ओवरलोडिंग और पीएचपी में ओवरराइड करना क्या है?

PHP में, आप ओवरलोडिंग फ़ंक्शन ओवरलोडिंग और फ़ंक्शन द्वारा क्या मतलब है? और दोनों के बीच अंतर क्या है? समझ नहीं सका कि उनके बीच क्या फर्क है

वेब के समाधान से एकत्रित समाधान "फ़ंक्शन ओवरलोडिंग और पीएचपी में ओवरराइड करना क्या है?"

ओवरलोडिंग उन कार्यों को परिभाषित कर रही है जिनके पास समान हस्ताक्षर हैं, फिर भी अलग-अलग मापदंड हैं। ओवरराइड केवल व्युत्पन्न कक्षाओं के लिए प्रासंगिक है, जहां माता-पिता वर्ग ने एक विधि परिभाषित की है और व्युत्पन्न कक्षा उस विधि को ओवरराइड करने के लिए इच्छा करता है।

PHP में, आप जादुई विधि __call का उपयोग करके केवल अधिभार तरीकों का उपयोग कर सकते हैं।

ओवरराइड का एक उदाहरण:

 <?php class Foo { function myFoo() { return "Foo"; } } class Bar extends Foo { function myFoo() { return "Bar"; } } $foo = new Foo; $bar = new Bar; echo($foo->myFoo()); //"Foo" echo($bar->myFoo()); //"Bar" ?> 

फ़ंक्शन ओवरलोडिंग तब होती है जब आप समान फ़ंक्शन नाम को दो बार (या अधिक) पैरामीटर के विभिन्न सेट का उपयोग करके परिभाषित करते हैं। उदाहरण के लिए:

 class Addition { function compute($first, $second) { return $first+$second; } function compute($first, $second, $third) { return $first+$second+$third; } } 

ऊपर दिए गए उदाहरण में, फ़ंक्शन compute दो भिन्न पैरामीटर हस्ताक्षरों से अतिभारित होती है। * यह अभी तक PHP में समर्थित नहीं है विकल्प वैकल्पिक तर्कों का उपयोग करना है:

 class Addition { function compute($first, $second, $third = 0) { return $first+$second+$third; } } 

फंक्शन ओवरराइड करना तब होता है जब आप किसी क्लास का विस्तार करते हैं और पैरेंट क्लास में मौजूद फ़ंक्शन को फिर से लिखते हैं:

 class Substraction extends Addition { function compute($first, $second, $third = 0) { return $first-$second-$third; } } 

उदाहरण के लिए, compute Addition में निर्धारित व्यवहार को ओवरराइड करता है।

सख्ती से बोलना, कोई अंतर नहीं है, क्योंकि आप या तो नहीं कर सकते हैं 🙂

फ़ंक्शन ओवरराइडिंग एक पीपीएक्स विस्तार जैसे एपीडी के साथ किया जा सकता था, लेकिन यह नापसंद है और पिछले संस्करण का उपयोग अनुपयोगी था।

PHP में फ़ंक्शन ओवरलोडिंग गतिशील टाइपिंग के कारण नहीं किया जा सकता, यानी, PHP में आप एक विशेष प्रकार के होने के लिए "परिभाषित" चर नहीं करते। उदाहरण:

 $a=1; $a='1'; $a=true; $a=doSomething(); 

प्रत्येक चर एक अलग प्रकार का है, फिर भी आप निष्पादन से पहले प्रकार जान सकते हैं (चौथा एक देखें)। एक तुलना के रूप में, अन्य भाषाओं का उपयोग:

 int a=1; String s="1"; bool a=true; something a=doSomething(); 

पिछले उदाहरण में, आपको चर प्रकार को जबरदस्ती रूप से सेट करना होगा (उदाहरण के तौर पर, मैंने डेटा प्रकार "कुछ" प्रयोग किया था)।


एक अन्य "मुद्दा" क्यों PHP में PHP ओवरलोडिंग संभव नहीं है: फ़ंक्शन में फ़ंक्शन का नाम फ़ंक्शन होता है, जो वर्तमान तर्कों की एक सरणी देता है, अब निम्न कोड पर विचार करें:

 function hello($a){ print_r(func_get_args()); } function hello($a,$a){ print_r(func_get_args()); } hello('a'); hello('a','b'); 

दोनों कार्यों को ध्यान में रखते हुए किसी भी तर्क को स्वीकार करना चाहिए, जिसे कंपाइलर चुनना चाहिए?


अंत में, मैं यह कहना चाहता हूं कि ऊपर दिए गए उत्तर आंशिक रूप से गलत क्यों हैं; फ़ंक्शन ओवरलोडिंग / ओव्हरराइडिंग विधि ओवरलोडिंग / ओवरराइड के बराबर नहीं है।

जहां एक विधि एक फ़ंक्शन की तरह होती है, लेकिन किसी वर्ग के लिए विशिष्ट होती है, उस स्थिति में, PHP कक्षाओं में ओवरराइड करने की अनुमति देता है, लेकिन भाषा शब्दार्थों के कारण फिर से कोई भार नहीं है।

निष्कर्ष निकालने के लिए, जावास्क्रिप्ट जैसी भाषाओं को ओवरराइड करने की अनुमति मिलती है (लेकिन फिर से, ओवरलोडिंग नहीं), हालांकि वे उपयोगकर्ता फ़ंक्शन और विधि को ओवरराइड करने में अंतर भी दिखा सकते हैं:

 /// Function Overriding /// function a(){ alert('a'); } a=function(){ alert('b'); } a(); // shows popup with 'b' /// Method Overriding /// var a={ "a":function(){ alert('a'); } } aa=function(){ alert('b'); } aa(); // shows popup with 'b' 

ओवरलोडिंग उदाहरण

 class overload { public $name; public function __construct($agr) { $this->name = $agr; } public function __call($methodname, $agrument) { if($methodname == 'sum2') { if(count($agrument) == 2) { $this->sum($agrument[0], $agrument[1]); } if(count($agrument) == 3) { echo $this->sum1($agrument[0], $agrument[1], $agrument[2]); } } } public function sum($a, $b) { return $a + $b; } public function sum1($a,$b,$c) { return $a + $b + $c; } } $object = new overload('Sum'); echo $object->sum2(1,2,3); 

यद्यपि ओवरलोडिंग प्रतिमान पूरी तरह से PHP द्वारा समर्थित नहीं है, वही (या बहुत ही समान) प्रभाव डिफ़ॉल्ट पैरामीटर के साथ प्राप्त किया जा सकता है (जैसा कि पहले उल्लेख किया गया है)।

यदि आप अपने फ़ंक्शन को इस तरह परिभाषित करते हैं:

 function f($p=0) { if($p) { //implement functionality #1 here } else { //implement functionality #2 here } } 

जब आप इस फ़ंक्शन को कॉल करेंगे:

 f(); 

आप एक कार्यशीलता (# 1) प्राप्त करेंगे, लेकिन यदि आप इसे पैरामीटर के समान कहते हैं:

 f(1); 

आप एक अन्य कार्यक्षमता (# 2) प्राप्त करेंगे यह ओवरलोडिंग का असर है – फ़ंक्शन के इनपुट पैरामीटर (एस) के आधार पर अलग-अलग कार्यक्षमता।

मुझे पता है, कोई व्यक्ति अब पूछेगा कि वह क्या कार्य करेगा, यदि वह इस समारोह को एफ (0) के रूप में कहता है

मैं यहाँ पर यह कहना चाहूंगा कि PHP में ओवरलोडिंग अन्य प्रोग्रामिंग भाषाओं की तुलना में पूरी तरह से अलग अर्थ है। बहुत से लोगों ने कहा है कि ओवरलोडिंग PHP में समर्थित नहीं है और ओवरलोडिंग की परंपरागत परिभाषा के अनुसार, यह कार्यक्षमता स्पष्ट रूप से उपलब्ध नहीं है

हालांकि, PHP में ओवरलोडिंग की सही परिभाषा पूरी तरह से अलग है।

पीएचपी ओवरलोडिंग में गतिशील रूप से गुणों और विधियों को __set () और __get () जैसे जादू विधियों का उपयोग करने के लिए संदर्भित करता है। विधियों या गुणों के साथ बातचीत करते समय इन ओवरलोडिंग विधियों को लागू किया जाता है जो कि पहुंच योग्य नहीं हैं या घोषित नहीं हैं।

यहां PHP मैनुअल से एक लिंक है: http://www.php.net/manual/en/language.oop5.overloading.php

PHP 5.xx यह ओवरलोड करने का समर्थन नहीं करता है इसलिए PHP पूरी तरह से ओओपी नहीं है।