2010-08-19 22 views
29

संभव डुप्लिकेट: What do the "=&" and "&=" operators in PHP mean?PHP ऑपरेटर = और मतलब क्या है?

मैं ऑपरेटर "= &" निम्नलिखित कोड में पाया, और मैं नहीं जानता कि इसका क्या मतलब। इसका क्या अर्थ है और यह क्या करता है?

कोड जहां मैं इसे पढ़ें:

function ContentParseRoute($segments) 
{ 
    $vars = array(); 

    //Get the active menu item 
    $menu =& JSite::getMenu(); 
    $item =& $menu->getActive(); 

    // Count route segments 
    $count = count($segments); 
     .... 
+3

http://stackoverflow.com/questions/1367454/what-do-operators-in-php-mean – muhmuhten

उत्तर

7

यह निर्देशात्मक असाइनमेंट ऑपरेटर है।

इसका मतलब है कि जब आप बाद में कोड में ऑपरेटर के एलएचएस को संशोधित करते हैं, तो यह आरएचएस को संशोधित करेगा। आप एलएचएस को स्मृति के उसी ब्लॉक पर इंगित कर रहे हैं जो आरएचएस पर कब्जा कर लेता है।

+4

एलएचएस = बाएं हाथ की ओर आरएचएस = दाईं ओर – Htbaa

+0

यह सही है (कम से कम आप यह नहीं कहा "ये वास्तव में दो ऑपरेटर हैं")। हालांकि, अंतिम वाक्यांश थोड़ा भ्रामक है। '$ A = $ b;', '$ b' में, ज्यादातर मामलों में, उसी स्मृति ब्लॉक को' $ a' के रूप में भी इंगित किया जाएगा।अंतर यह है कि परिवर्तनीय संशोधन पर अलग किया जाएगा, जबकि यदि यह एक संदर्भ सेट में है, तो यह होगा। यह कहना अधिक सटीक हो सकता है कि 'एलएचएस और आरएचएस पर प्रतीकों एक ही चर हैं "या उस प्रभाव के लिए कुछ, और" स्मृति "संदर्भ छोड़ दें। – Artefacto

+0

स्वीकार्य उत्तर यह इंगित करता है कि जब आप आरएचएस संशोधित करते हैं, एलएचएस भी संशोधित हो जाता है। क्या यह सही है? –

52

यह संदर्भ (&) द्वारा असाइनमेंट (=) नहीं है।

आप कहना चाहते थे, तो:

$a = 42; 
$b =& $a; 

आप कर रहे हैं वास्तव में $aसंदर्भ द्वारा $b को असाइन कह।

संदर्भ द्वारा निर्दिष्ट करने से दो चर एक साथ "टाई" होते हैं। अब, यदि आप $a को बाद में संशोधित करना चाहते हैं, तो $b इसके साथ बदल जाएगा।

उदाहरण के लिए:

$a = 42; 
$b =& $a; 

//later 
echo $a; // 42 
echo $b; // 42 

$a = 13; 
echo $a; // 13 
echo $b; // 13 

संपादित करें:

Artefacto के रूप में टिप्पणी में बताते हैं, $a =& $bनहीं$a = (&$b) के समान है।

इसका कारण यह है & ऑपरेटर का मतलब है कुछ के बाहर एक संदर्भ बनाने जबकि, = ऑपरेटर आवंटित-दर-मूल्य करता है, इसलिए अभिव्यक्ति $a = (&$b) साधन $b के लिए एक अस्थायी संदर्भ है, तो उस अस्थायी का मान असाइन कर $a पर, असाइन-बाय-रेफरेंस नहीं है।

$array = array('apple', 'orange', 'banana'); 

// Without & 
foreach($array as $d) 
{ 
    $d = 'fruit'; 
} 

echo implode(', ', $array); // apple, orange, banana 

// With & 
foreach($array as &$d) 
{ 
    $d = 'fruit'; 
} 

echo implode(', ', $array); // fruit, fruit, fruit 

नहीं एक व्याख्या है, लेकिन एक =& काम में इसका उपयोग करने के बिना & ऑपरेटर का उपयोग करने में सक्षम होने का एक उदाहरण:

+9

-1 '$ बी = (&$a);' अमान्य वाक्यविन्यास है। मुझे पता है कि यह आपका मुद्दा नहीं है, लेकिन '= &' वास्तव में एक एकल ऑपरेटर है, और ऑपोड 'ASSIGN_REF' में अनुवाद करता है यह एक अप्रासंगिक आंतरिक अवलोकन नहीं है। एक समारोह 'func' पर विचार करें जो संदर्भ' $ a = func() 'द्वारा लौटाता है। यह फ़ंक्शन एक संदर्भ लौटा रहा है, फिर भी '$ a' संदर्भ नहीं होगा क्योंकि ऑपरेटर' = 'संदर्भ सेट को तोड़ता है और ध्वज को साफ़ करता है। आपको वास्तव में '$ a = और $ func()'। 'और' का अर्थ है "इसका संदर्भ लें (उदाहरण के लिए' सरणी (और $ ए)') लेकिन संदर्भ बनाना संदर्भ द्वारा असाइन करने के लिए पर्याप्त नहीं है। – Artefacto

+3

वास्तव में, अब? मुझे यह नहीं पता था, और यह कभी भी ब्रो नहीं मेरे लिए पहले (कम से कम स्पष्ट रूप से)। मान लीजिए कि आप हर दिन कुछ सीखते हैं। :) मैं इस सुधार के लिए अपना जवाब संपादित करूंगा। –

3

यहाँ प्रयोग में यह का एक उदाहरण है।

+1

अन्य उत्तरों पर मेरी टिप्पणियां देखें। '&' के कई अर्थों से भ्रमित न हों। वे सभी संदर्भों से संबंधित हैं, लेकिन उनका मतलब एक ही बात नहीं है। – Artefacto

संबंधित मुद्दे