किसने आपको बताया कि PHP फ़ंक्शन ओवरलोडिंग का समर्थन नहीं करता है !!!
वास्तव में PHP फंक्शन ओवरलोडिंग का समर्थन करता है, लेकिन एक अलग तरीके से। PHP के ओवरलोडिंग फीचर्स जावा के अलग हैं:
PHP की "ओवरलोडिंग" की व्याख्या, अधिकांश वस्तु उन्मुख भाषाओं से अलग है। ओवरलोडिंग परंपरागत रूप से एक ही नाम के साथ कई तरीकों को करने की क्षमता प्रदान करता है लेकिन विभिन्न मात्रा और प्रकार के तर्क।
निम्नलिखित कोड ब्लॉक चेकआउट करें।
N संख्याओं का योग खोजने का कार्य:
function findSum() {
$sum = 0;
foreach (func_get_args() as $arg) {
$sum += $arg;
}
return $sum;
}
echo findSum(1, 2), '<br />'; //outputs 3
echo findSum(10, 2, 100), '<br />'; //outputs 112
echo findSum(10, 22, 0.5, 0.75, 12.50), '<br />'; //outputs 45.75
दो संख्याओं को जोड़ने या दो तारों को जोड़ने का कार्य:
function add() {
//cross check for exactly two parameters passed
//while calling this function
if (func_num_args() != 2) {
trigger_error('Expecting two arguments', E_USER_ERROR);
}
//getting two arguments
$args = func_get_args();
$arg1 = $args[0];
$arg2 = $args[1];
//check whether they are integers
if (is_int($arg1) && is_int($arg2)) {
//return sum of two numbers
return $arg1 + $arg2;
}
//check whether they are strings
if (is_string($arg1) && is_string($arg2)) {
//return concatenated string
return $arg1 . ' ' . $arg2;
}
trigger_error('Incorrect parameters passed', E_USER_ERROR);
}
echo add(10, 15), '<br />'; //outputs 25
echo add("Hello", "World"), '<br />'; //outputs Hello World
विधि ओवरलोडिंग सहित ऑब्जेक्ट ओरिएंटेड दृष्टिकोण:
PHP में ओवरलोडिंग से संपत्तियों और विधियों को गतिशील रूप से "बनाने" का अर्थ मिलता है। इन गतिशील संस्थाओं को जादू के तरीकों के माध्यम से संसाधित किया जाता है जो विभिन्न क्रिया प्रकारों के लिए एक वर्ग में स्थापित कर सकते हैं।
Ref: http://php.net/manual/en/language.oop5.overloading.php
पीएचपी में, साधन अधिक भार आप रन-टाइम में वस्तु सदस्य जोड़ सकते हैं जैसे जादू तरीकों के कुछ को लागू करने से, __set
, __get
, __call
आदि
class Foo {
public function __call($method, $args) {
if ($method === 'findSum') {
echo 'Sum is calculated to ' . $this->_getSum($args);
} else {
echo "Called method $method";
}
}
private function _getSum($args) {
$sum = 0;
foreach ($args as $arg) {
$sum += $arg;
}
return $sum;
}
}
$foo = new Foo;
$foo->bar1(); // Called method bar1
$foo->bar2(); // Called method bar2
$foo->findSum(10, 50, 30); //Sum is calculated to 90
$foo->findSum(10.75, 101); //Sum is calculated to 111.75