2012-02-27 10 views
8
$bar = 7; 
$foo =& $bar = 9; 

तकनीकी स्टैंड बिंदु से, क्या इसका मूल्यांकन दाएं से बाएं से नहीं किया जाएगा? तो: $ बार = 9; $ foo = & $ बारमैं PHP में संदर्भित एक चर को असाइन क्यों नहीं कर सकता?

यदि कोई सोच रहा है। मैं इसे एक पंक्ति पर कर रहा हूं क्योंकि पैर की अंगुली की अंगूठी से बचने के लिए है।

+7

पैर की अंगुली की नाखून कतरनों? – Tim

+0

यह '$ foo = & ($ bar = 9) 'जैसा ही है, जो स्पष्ट रूप से काम नहीं करता है। – h0tw1r3

+0

ब्रैकेट जोड़ना इस मामले में चीजों को और अधिक स्पष्ट नहीं करता है। आपको लगता है कि मैं बस शैतान के वकील हूं। हालांकि मैं एक प्रशंसक नहीं हूं कि semantically 9 $ बार वापस आ गया है, यह समझ में आता है। –

उत्तर

13

असाइनमेंट अभिव्यक्ति $bar = 9$bar (यानी चर स्वयं) का संदर्भ वापस नहीं करता है; इसके बजाय, यह पूर्णांक मान 9 देता है।

या यदि आप manual से एक उद्धरण की जरूरत है:

एक काम अभिव्यक्ति के मूल्य सौंपा मूल्य है। यही कारण है, की "$ एक = 3" 3.

है आप एक संदर्भ केवल एक चर जो वह मान रखती है, एक मूल्य के लिए सीधे असाइन नहीं कर सकते मूल्य है। तो आपका आसान एक-लाइनर शानदार रूप से विफल रहता है, और आपको इसे दो में विभाजित करना होगा।

+0

धन्यवाद बोल्टक्लॉक, यह समझ में आता है। क्या यह सी ++ में इस तरह से काम करता है? मेरे पास एक कंपाइलर आसान नहीं है। यदि यह सी ++ में इस तरह से काम नहीं करता है, तो क्या कोई ऐसी भाषा है जो इस तरह से काम करेगी? क्या यह भी संभव है? मेरा मतलब है, क्यों नहीं $ बार वापस करें और शाब्दिक को बार का मूल्यांकन करने के लिए अंतिम संभव दूसरे तक प्रतीक्षा करें, इस तरह आप शाब्दिक के साथ अटकने के बजाय बार का संदर्भ प्राप्त कर सकते हैं? –

+0

जहां तक ​​मुझे पता है, यह प्राइमेटिव्स (इनट्स, लांग, फ्लोट्स, चार्स) के लिए अन्य सी-स्टाइल भाषाओं में समान व्यवहार करता है - असाइनमेंट एक्सप्रेशन हमेशा मूल रूप से असाइन किए गए मान को वापस कर देता है। आपके आखिरी प्रश्न के लिए ... मैं असाइनमेंट ऑपरेटर के सटीक अर्थशास्त्र के बारे में निश्चित नहीं हूं, इसलिए मैं उस पर विस्तार नहीं कर सकता। – BoltClock

+0

हाहा, इसके बारे में सोचते हुए, मेरा दिमाग इतना जावास्क्रिप्ट से थोड़ा खराब हो गया है। समस्या यह है कि $ बार और सभी चर संदर्भ नहीं हैं। तो बोल्ट, निम्नलिखित सी ++ काम करेगा: "int v; int & j; v = j = 9;" मुझे लगता है कि यह होगा। हां, मुझे नहीं लगता कि आप PHP में समान कुछ लिख सकते हैं। –

2
बहुत ही कारण है कि

$bar =& 9; 

मान्य नहीं है के लिए

(क्योंकि संदर्भ अन्य चर को इंगित कर सकते हैं, लेकिन लगातार/शाब्दिक नहीं)। देखें: http://www.php.net/manual/en/language.references.whatdo.php

+0

बोल्टक्लॉक के जवाब के बारे में जो मुझे उलझन में था, देखें। मुझे पता है कि आप एक शाब्दिक से संदर्भ नहीं ले सकते हैं। जो मुझे नहीं पता था कि असाइनमेंट ने संदर्भ के बजाय एक शाब्दिक लौटा दिया था। –

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