Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP में =& (रेफरेंस असाइनमेंट) ऑपरेटर का अर्थ और उपयोग

PHP में =& ऑपरेटर **रेफरेंस असाइनमेंट (Assignment by Reference)** करता है। यह मान की कॉपी बनाने के बजाय, दोनों वेरिएबल्स को **समान मेमोरी स्थान** पर इंगित करता है। एक में परिवर्तन दूसरे में प्रतिबिंबित होता है।

उदाहरण

<?php
$my_val1 = 67;
$my_val2 = &$my_val1; // रेफरेंस असाइनमेंट
$my_val1 = 89;

print "The value is: ";
print $my_val2; // 89 प्रिंट होगा
?>

आउटपुट

The value is: 89

क्या हुआ:

  1. $my_val1 = 67 — मेमोरी में 67 स्टोर, $my_val1 उस ओर इंगित करता है।
  2. $my_val2 = &$my_val1 — $my_val2 **उसी** मेमोरी स्थान की ओर इंगित करता है (कॉपी नहीं)।
  3. $my_val1 = 89 — उस मेमोरी स्थान का मान 89 हो जाता है।
  4. $my_val2 पढ़ने पर 89 मिलता है क्योंकि यह उसी स्थान को देखता है।

सामान्य असाइनमेंट (=) बनाम रेफरेंस (=&)

प्रकारकोडव्यवहार
मान द्वारा (कॉपी)$b = $a;$b को $a की **कॉपी** मिलती है। बाद में $a बदलने पर $b अपरिवर्तित रहता है।
रेफरेंस द्वारा$b = &$a;$b और $a **समान डेटा** साझा करते हैं। किसी भी में परिवर्तन दूसरे में दिखता है।

व्यावहारिक उपयोग

1. फ़ंक्शन में रेफरेंस द्वारा पास करना

<?php
function modify(&$value) {
    $value *= 2;
}
$num = 5;
modify($num);
echo $num; // 10
?>

2. फोरिच में रेफरेंस द्वारा संशोधन

<?php
$arr = [1, 2, 3];
foreach ($arr as &$val) {
    $val *= 2;
}
unset($val); // महत्वपूर्ण!
print_r($arr); // [2, 4, 6]
?>

3. ऑब्जेक्ट्स (PHP 5+ में डिफ़ॉल्ट रेफरेंस सेमांटिक्स)

<?php
class Foo { public $val = 1; }
$a = new Foo();
$b = $a; // ऑब्जेक्ट्स डिफ़ॉल्ट रूप से रेफरेंस-जैसे व्यवहार करते हैं
$b->val = 2;
echo $a->val; // 2
?>

सावधानियाँ

  • अनइंटेंशनल साइड इफेक्ट्स: रेफरेंस अनपेक्षित बग्स पैदा कर सकते हैं।
  • अनसेट करना: unset($b) केवल रेफरेंस हटाता है, डेटा नहीं (यदि अन्य रेफरेंस मौजूद हैं)।
  • प्रदर्शन: PHP के कॉपी-ऑन-राइट (COW) तंत्र के कारण, मान द्वारा पास करना अक्सर समान तेज़ होता है जब तक संशोधन न हो।
  • PHP 8.1+ में readonly प्रॉपर्टीज़: रेफरेंस के साथ असंगत।

सारांश

=& दो वेरिएबल्स को समान zval (PHP का आंतरिक मान कंटेनर) साझा करने के लिए बांधता है। यह डेटा अतिरेक से बचाता है और बड़े डेटा संरचनाओं को कॉपी किए बिना संशोधित करने की अनुमति देता है, लेकिन सावधानीपूर्वक उपयोग की आवश्यकता होती है।

  1. - PHP में पास बाय रेफरेंस और पास बाय वैल्यू क्या है?

    इस लेख में, हम PHP में पास बाय वैल्यू और पास बाय रेफरेंस के बारे में सीखेंगे। अब, आइए इन दो कॉन्सेप्ट्स को विस्तार से समझते हैं। PHP में आमतौर पर, हम फंक्शन को आर्गुमेंट्स पास करने के लिए पास बाय वैल्यू दृष्टिकोण का पालन करते हैं। हम इस अभ्यास का पालन करते हैं क्योंकि यदि फंक्शन के भीतर आर्गुमेंट

  1. - C# में असाइनमेंट ऑपरेटर क्या है

    C# में असाइनमेंट ऑपरेटर का उपयोग करके वेरिएबल को वैल्यू असाइन करें। C# में निम्नलिखित असाइनमेंट ऑपरेटर्स हैं - ऑपरेटर विवरण उदाहरण = सिंपल असाइनमेंट ऑपरेटर, राइट साइड ऑपरेंड्स से लेफ्ट साइड ऑपरेंड को वैल्यू असाइन करता है C = A + B, A + B की वैल्यू को C में असाइन करता है += एड AND असाइनमेंट

  1. - C# में डेटा टाइप्स, वैल्यू टाइप्स और रेफरेंस टाइप्स क्या हैं?

    C# में डेटा टाइप्स दो प्रकार के होते हैं यानी वैल्यू टाइप, रेफरेंस टाइप और पॉइंटर टाइप।वैल्यू टाइप्सवैल्यू टाइप वेरिएबल्स को सीधे मान असाइन किया जा सकता है। ये System.ValueType क्लास से डेराइव्ड होते हैं।निम्न वैल्यू टाइप डेटा टाइप्स हैं:टाइपप्रतिनिधित्व करता हैरेंजडिफ़ॉल्ट मानboolबूलियन मानTrue या