परिचय
PHP में "ओवरलोडिंग" का अर्थ C++ या Java जैसे अन्य ऑब्जेक्ट-ओरिएंटेड भाषाओं से भिन्न है। वहां ओवरलोडिंग का तात्पर्य एक ही नाम के कई मेथड्स को अलग-अलग आर्गुमेंट्स या रिटर्न टाइप के साथ परिभाषित करना होता है। लेकिन PHP में, ओवरलोडिंग का मतलब है मैजिक मेथड्स (डबल अंडरस्कोर से शुरू होने वाले मेथड नाम) का उपयोग करके रनटाइम पर डायनामिक रूप से प्रॉपर्टीज़ और मेथड्स बनाना।
प्रॉपर्टी ओवरलोडिंग के लिए मैजिक मेथड्स
निम्नलिखित मैजिक मेथड्स प्रॉपर्टी ओवरलोडिंग के लिए उपयोग किए जाते हैं:
सिंटैक्स
public __set(string $name, mixed $value): void public __get(string $name): mixed public __isset(string $name): bool public __unset(string $name): void
- __set() - तब चलता है जब inaccessible (protected, private या non-existing) प्रॉपर्टी में डेटा लिखा जाता है।
- __get() - inaccessible प्रॉपर्टी से डेटा पढ़ता है।
- __isset() - inaccessible प्रॉपर्टी पर isset() या empty() कॉल होने पर ट्रिगर होता है।
- __unset() - inaccessible प्रॉपर्टी पर unset() कॉल होने पर आह्वान होता है।
उदाहरण: डायनामिक प्रॉपर्टी
निम्न कोड में, एक डायनामिक प्रॉपर्टी myprop को सेट, रिट्रीव और अनसेट किया गया है:
<?php
class myclass {
public function __set($name, $value) {
echo "setting $name property to $value \n";
$this->$name = $value;
}
public function __get($name) {
echo "value of $name property is ";
return $this->$name;
}
public function __isset($name) {
return isset($this->$name);
}
public function __unset($name) {
unset($this->$name);
}
}
$obj = new myclass();
$obj->myprop = "test";
echo $obj->myprop . "\n";
var_dump(isset($obj->myprop));
unset($obj->myprop);
var_dump(isset($obj->myprop));
?>
आउटपुट
setting myprop property to test value of myprop property is test bool(true) bool(false)
मेथड ओवरलोडिंग
मेथड्स को डायनामिक रूप से सेट करने के लिए दो मैजिक मेथड्स उपयोग किए जाते हैं: __call() और __callStatic()।
सिंटैक्स
public __call(string $name, array $arguments): mixed public static __callStatic(string $name, array $arguments): mixed
- __call() - ऑब्जेक्ट कॉन्टेक्स्ट में inaccessible मेथड आह्वान होने पर ट्रिगर होता है।
- __callStatic() - स्टेटिक कॉन्टेक्स्ट में inaccessible मेथड आह्वान होने पर ट्रिगर होता है।
उदाहरण: मेथड ओवरलोडिंग
<?php
class myclass {
public function __call($name, $args) {
// नोट: $name का मान केस-सेंसिटिव होता है
echo "Calling object method $name with " . implode(" ", $args) . "\n";
}
public static function __callStatic($name, $args) {
echo "Calling static method $name with " . implode(" ", $args) . "\n";
}
}
$obj = new myclass();
$obj->mymethod("Hello World!");
myclass::mymethod("Hello World!");
?>
आउटपुट
Calling object method mymethod with Hello World! Calling static method mymethod with Hello World!