2009-11-20 12 views
69

=& (बराबर-एम्पर्सेंड) असाइनमेंट ऑपरेटर PHP में क्या करता है?PHP में संदर्भ असाइनमेंट ऑपरेटर, = और

क्या यह बहिष्कृत है?

+0

यह भी देखें http://stackoverflow.com/questions/3200009 (इस के डुप्लिकेट के रूप में चिह्नित) – Artefacto

उत्तर

73

यह बहिष्कृत नहीं है और यह होने की संभावना नहीं है। उदाहरण के लिए, मौजूदा डेटा की प्रतिलिपि बनाने के बजाय, एक सरणी या ऑब्जेक्ट दर्पण परिवर्तनों का एक हिस्सा बनाने का मानक तरीका है।

इसे संदर्भ द्वारा असाइनमेंट कहा जाता है, जो मैनुअल को उद्धृत करने के लिए "means that both variables end up pointing at the same data, and nothing is copied anywhere" है।

केवल बात यह है कि PHP 5 में =& "संदर्भ द्वारा new का परिणाम बताए" है के साथ हटा दिया गया है, जो किसी भी भ्रम का स्रोत हो सकता है। new स्वचालित रूप से संदर्भ द्वारा असाइन किया गया है, इसलिए &$o = &new C; में अनावश्यक/बहिष्कृत है, लेकिन $o = &$c; में नहीं है।


चूंकि यह खोज करने के लिए, ध्यान दें कि =& (एम्परसेंड के बराबर होती है) (अंतरिक्ष एम्परसेंड के बराबर होती है) = & रूप में ही है और अक्सर इस तरह लिखा है कि यह $x = &$y['z']; या $x = &$someVar जैसे अन्य चर में चलाता है मुश्किल है (ampersand डॉलर साइन वैरिएबल नाम)। उदाहरण डॉक्स से सरल बनाया:

$a = 3; 
$b = &$a; 
$a = 4; 
print "$b"; // prints 4 

यहाँ एक detailed section on Assign By Reference in the PHP manual एक आसान लिंक भी है। वह पृष्ठ संदर्भों पर एक श्रृंखला का हिस्सा है - पूरे श्रृंखला को पढ़ने में एक मिनट लगाना उचित है।

+11

पूरे श्रृंखला – Pacerier

+3

साइड नोट री पढ़ने के लिए एक मिनट और अधिक समय लगेगा: * "चूंकि खोजना मुश्किल है" *: http://symbolhound.com इस तरह की चीजों के लिए आपका मित्र है। – billynoah

21

यह दो अलग-अलग ऑपरेटरों हैं। = असाइनमेंट है जैसा कि आप शायद जानते हैं। और & का अर्थ है वैरिएबल को मूल्य के बजाय संदर्भ द्वारा एक्सेस किया जाना चाहिए।

+51

मुझे खेद है, लेकिन यह तरीका बहुत सरल है। $ ए = और $ बी का अर्थ है वैरिएबल $ को उसी चीज़ का संदर्भ देना जो $ बी अभी करता है। इसके बाद, $ ए = 5; इसके परिणामस्वरूप $ बी होने पर भी $ बी हो सकता है। हालांकि संदर्भ लिंक $ b = & $xyz; या अनसेट ($ b) द्वारा टूटा जा सकता है; उस समय $ एक ही वैरिएबल होगा जो जानता है कि सेल कहां है। 5 यह भी सावधान रहें कि यदि आप $ = का उपयोग कर सेट करते हैं, तो आपको = और अगली बार (या अनसेट ($ ए)) का उपयोग करना होगा $ ए का संदर्भ लिंक, विशेष रूप से $ a = NULL; लिंक तोड़ नहीं देगा, यह केवल 5 को शून्य के साथ बदल देता है; – Don

+7

@ डॉन: विस्तार के लिए धन्यवाद। मैं बता सकता हूं कि आप एक सी प्रोग्रामर हैं। – Asaph

+6

मैं दूसरा क्या डॉन कहता हूं। लेकिन मैं नहीं कहूंगा कि यह रास्ता बहुत सरल है। मैं कहूंगा कि यह गलत है। – Artefacto

5
$x = &$y['z']; 

भी $y['z'] बनाने अगर यह मौजूद नहीं है, और null करने के लिए इसे स्थापित करने का प्रभाव पड़ता है।

यह उन त्रुटि संदेशों को रोकता है जिन्हें आप पढ़ना चाहते थे। मुझे अभी तक दस्तावेज नहीं मिला है; संभवतः 5.3 में नया, मुझे पता है कि सभी के लिए।

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