परिचय
PHP में, ऑब्जेक्ट्स डिफ़ॉल्ट रूप से रेफरेंस द्वारा पास किए जाते हैं। यहां रेफरेंस एक उपनाम (alias) है जो दो अलग-अलग वेरिएबल्स को एक ही मान पर लिखने की अनुमति देता है। एक ऑब्जेक्ट वेरिएबल ऑब्जेक्ट को स्वयं मान के रूप में नहीं रखता; यह केवल एक ऑब्जेक्ट पहचानकर्ता (identifier) रखता है जिसके माध्यम से वास्तविक ऑब्जेक्ट ढूंढा जाता है।
जब किसी ऑब्जेक्ट को आर्गुमेंट के रूप में भेजा जाता है, रिटर्न किया जाता है या असाइन किया जाता है, तो अलग-अलग वेरिएबल्स aliases नहीं होते — बल्कि वे पहचानकर्ता की एक प्रति रखते हैं जो उसी ऑब्जेक्ट को इंगित करता है।
उदाहरण: spl_object_hash() के साथ ऑब्जेक्ट पहचान
PHP में spl_object_hash() फंक्शन होता है जो किसी ऑब्जेक्ट की यूनिक हैश ID लौटाता है। निम्न कोड में, दो ऑब्जेक्ट वेरिएबल्स जो एक ही ऑब्जेक्ट को संदर्भित करते हैं, वही ID लौटाते हैं:
<?php
class test1 {
public $name;
}
$obj1 = new test1();
echo "ID of obj1: " . spl_object_hash($obj1) . "\n";
$obj2 = $obj1;
echo "ID of obj2: " . spl_object_hash($obj2);
?>
आउटपुट
ID of obj1: 000000004355dda6000000006f04b1a7 ID of obj2: 000000004355dda6000000006f04b1a7
रेफरेंस असाइनमेंट (& ऑपरेटर)
जब हम किसी ऑब्जेक्ट वेरिएबल का रेफरेंस बनाते हैं (नाम से पहले & लगाकर), तो प्रॉपर्टीज़ में कोई भी परिवर्तन ऑटोमैटिकली रेफरेंस वेरिएबल में प्रतिबिंबित होता है:
<?php
class test1 {
public $name;
}
$obj1 = new test1();
echo "ID of obj1: " . spl_object_hash($obj1) . "\n";
$obj2 = &$obj1;
echo "ID of obj2: " . spl_object_hash($obj2) . "\n";
$obj1->name = "Amar";
echo "name: " . $obj2->name;
?>
आउटपुट
ID of obj1: 00000000163cf0b8000000003ad0ed93 ID of obj2: 00000000163cf0b8000000003ad0ed93 name: Amar
मुख्य बिंदु
- ऑब्जेक्ट असाइनमेंट पहचानकर्ता की कॉपी बनाता है, न कि ऑब्जेक्ट की।
- & ऑपरेटर से असाइनमेंट करने पर दोनों वेरिएबल्स एक ही पहचानकर्ता साझा करते हैं।
- spl_object_hash() से ऑब्जेक्ट की विशिष्ट पहचान सत्यापित की जा सकती है।