Magic Methods
Magic methods क्या हैं
Magic methods ख़ास methods हैं जिनके नाम दो underscores से शुरू होते हैं, जैसे __construct या __toString। इन्हें आप कभी नाम से call नहीं करते — PHP इन्हें सही पल पर अपने-आप call करती है, जैसे जब object बने, पढ़ा जाए, या print हो। ये class को इन events से जुड़ने देते हैं।
__ एक method को magic के रूप में चिह्नित करता है — PHP द्वारा auto-called, आपके द्वारा नहीं।__construct और __destruct
__construct object बनने पर चलता है; __destruct उसके नष्ट होने पर।
<?php
class User {
public function __construct() {
echo "Object created\n";
}
public function __destruct() {
echo "Object destroyed";
}
}
$u = new User();
?>
Object destroyed
__construct अब तक सबसे ज़्यादा इस्तेमाल होने वाला magic method है — यह नए objects set करता है। __destruct cleanup के समय चलता है, resources बंद करने को उपयोगी।
__get और __set
ये तब चलते हैं जब आप ऐसी property access करें जो सीधे उपलब्ध नहीं।
<?php
class Box {
private $data = [];
public function __set($name, $value) { $this->data[$name] = $value; }
public function __get($name) { return $this->data[$name] ?? null; }
}
$b = new Box();
$b->color = "red"; // __set call करता है
echo $b->color; // __get call करता है
?>
भले color declared property नहीं, __set और __get access को intercept करते हैं, class को उसे manage करने देकर — validation या data लचीले ढंग से रखने के लिए बढ़िया।
__call
__call तब चलता है जब आप ऐसा method call करें जो मौजूद नहीं।
<?php
class Api {
public function __call($name, $args) {
return "You called $name";
}
}
$a = new Api();
echo $a->anything();
?>
Error के बजाय, __call missing method पकड़ता है — लचीले APIs बनाने या calls कहीं और forward करने को काम का।
__toString
__toString तय करता है object text की तरह इस्तेमाल होने पर कैसा दिखे।
<?php
class Money {
public $amount = 100;
public function __toString() {
return "Rs " . $this->amount;
}
}
echo new Money();
?>
__toString बिना object echo करना error देता है। इसके साथ, आप string रूप control करते हैं — उन objects के लिए बढ़िया जिनका स्वाभाविक text रूप हो।
आम गलतियाँ
- Magic methods सीधे call करना। आप शायद ही
$obj->__construct()लिखें — PHP इन्हें आपके लिए call करती है। __toStringstring return करता है यह भूलना। इसे textreturnकरना चाहिए, echo नहीं।__get/__setका ज़्यादा इस्तेमाल। ये bugs छिपा सकते हैं; जब हो सके असली properties declare कीजिए।- दो की जगह एक underscore। Magic methods को double underscore
__चाहिए।
सारांश
- Magic methods
__से शुरू होते हैं और PHP द्वारा अपने-आप call होते हैं। __construct/__destructobject बनने और cleanup पर चलते हैं।__get/__setproperty access intercept करते हैं।__callmissing methods की calls पकड़ता है।__toStringechoके लिए object का text रूप तय करता है।
आगे, classes structure कीजिए PHP OOP से, या code दोबारा इस्तेमाल कीजिए PHP traits से।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
PHP में magic methods क्या हैं?
__construct)। इन्हें आप सीधे call नहीं करते — PHP इन्हें कुछ ख़ास पलों पर अपने-आप call करती है, जैसे जब object बनता है या string में बदलता है।__construct क्या करता है?
__construct() उसी पल अपने-आप चलता है जब आप new से object बनाते हैं। यह object की शुरुआती values set करने को इस्तेमाल होता है। यह सबसे ज़्यादा इस्तेमाल होने वाला magic method है।__get और __set किसलिए हैं?
__get तब चलता है जब आप ऐसी property पढ़ें जो पहुँच योग्य नहीं या मौजूद नहीं, और __set तब जब आप उसमें लिखें। ये class को property access control या intercept करने देते हैं, validation या virtual properties के लिए उपयोगी।__toString क्या करता है?
__toString() तय करता है कि जब object को string की तरह इस्तेमाल किया जाए तो क्या हो, जैसे echo $obj से। इसके बिना object echo करना error देता है; इसके साथ, आप text रूप तय करते हैं।