2010-10-25 7 views
9

मैं आमतौर पर यह लिख:पीएचपी: तुलनात्मक अशक्त में ऑपरेटरों के क्रम

if ($myvar == null) 

लेकिन कभी कभी मैंने पढ़ा है यह:

if (null == $myvar) 

मुझे याद है किसी ने मुझे बताया कि बाद में बेहतर है, लेकिन मैं डॉन ' याद क्यों नहीं।

क्या आप जानते हैं कि कौन सा बेहतर है और क्यों?

धन्यवाद, दान

+1

यह http://stackoverflow.com/questions/271561/why-does-one-often-see-null-variable-instead-of-variable-null-in-c और कई अन्य – Harmen

उत्तर

11

अगर आप गलती से = में से एक भूल जाते हैं, दूसरा एक एक त्रुटि दे देंगे।

if ($myvar = null) 

यह $myvar को null निर्दिष्ट करेंगे और परिणाम पर if जांच करेगी।

if (null = $myvar) 

यह null को $myvar का मान असाइन और क्योंकि आप null को असाइन नहीं कर सकते एक त्रुटि देने की कोशिश करेंगे।

+0

I का डुप्लिकेट है। देख। यह समझ आता है। धन्यवाद! – Tom

1

यह आदेश के बारे में नहीं है, यह एक = आकस्मिक छोड़ने से बचने के बारे में है, जिसके परिणामस्वरूप तुलना के बजाय असाइनमेंट होगा। निरंतर-पहले सम्मेलन का उपयोग करते समय, आकस्मिक वगैरह एक त्रुटि फेंक देगा।

0

मैं बाद में मदद करने के इस तरह के रूप प्रोग्रामर त्रुटियों से बचने के लिए प्रयोग किया जाता देखा है:

if($myvar = null) 

हमेशा ऐसा सच वापस आ जाएगी, जबकि

if(null = $myvar) 

एक त्रुटि फेंक देते हैं।

+0

नहीं, पहला व्यक्ति 'शून्य' वापस करेगा, जो बुलियन रूपांतरण में 'झूठी' का मूल्यांकन करता है, इसलिए यह सशर्त कभी नहीं गुजरता है। दूसरी समस्या यह है कि यह 'myvar' को' null' पर भी सेट करेगा। – lonesomeday

0

आप इसके बजाय is_null() का उपयोग कर सकते हैं।

if($myvar = null) 

जो वास्तव में $myvar को null प्रदान करती है:

+0

वह क्या नहीं पूछ रहा था, यह ऑपरेंड ऑर्डर के बारे में है। – fredley

0

समानता ऑपरेटर == के स्थान पर असाइनमेंट ऑपरेटर = का उपयोग करना एक आम गलती है। एक तरीका यह तार्किक पकड़ा त्रुटि प्राप्त करने के लिए एलएचएस पर निरंतर उपयोग करने के लिए इतना है कि अगर आप == के स्थान पर = का उपयोग आप एक (null इस मामले में) स्थिरांक के रूप में त्रुटि मिलेगी सौंपा मूल्यों नहीं किया जा सकता है:

1

क्या इस व्यक्ति ने सशर्त बयानों के संबंध में सूक्ष्म अनुकूलन के लिए संकेत दिया होगा। उदाहरण के लिए, निम्नलिखित में, दूसरी स्थिति का मूल्यांकन नहीं किया जाएगा क्योंकि पहले से ही असफल रहा है।

if (1 == 0 && 1 == 1) 

हालांकि, आपके पास हमेशा मूल्यांकन किया जाएगा। इसलिए आदेश कोई फर्क नहीं पड़ता, और पहले से उल्लिखित सम्मेलन जाने का रास्ता है।

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