2012-04-22 16 views
5

का उपयोग कर ठीक है तो मैंने अभी PHP के साथ कुछ डरावना व्यवहार महसूस किया है और यह जानना चाहते हैं कि ऐसा क्यों होता है। इसलिए इस कोड चलाने:पीएचपी टर्नरी स्टेटमेंट 'और'

var_dump(true and false ? 'one' : 'two'); 

आउटपुट

boolean true 
बजाय

'दो' के रूप में आप उम्मीद करेंगे ... समस्या का उपयोग करने की 'और' प्रकट होता है।

रनिंग:

var_dump(true && false ? 'one' : 'two'); 

आउटपुट

string 'two' (length=3) 

उम्मीद बस के रूप में। '& &' के बजाय 'और' का उपयोग क्यों करना इस अजीब व्यवहार का कारण बनता है? क्या वे समान नहीं हैं?

+0

मुझे इसका जवाब जानना अच्छा लगेगा। मेरा अनुमान है कि ऑर्डर .. पहले में, टर्नरी ऑपरेटर के लिए झूठा उपयोग किया जाता है जो सच और 'दो' के लिए आता है, जो सच में मूल्यांकन करता है ... – DanRedux

+0

ऐसा लगता है कि मैं सही था। : पी – DanRedux

उत्तर

5

क्योंकि ?:and की तुलना में अधिक precedence, लेकिन && की तुलना में कम है है यही कारण है कि।

+0

वाह, यह सिर्फ मूर्ख है। क्या कोई तर्कसंगत कारण है 'और' और '&&' समान सटीकता नहीं है? – dtbarne

+0

अब यह समझ में नहीं आता कि उन्होंने ऐसा क्यों किया ... अब मुझे एहसास है कि $ एक और $ दो का उपयोग करना || उदाहरण के लिए $ तीन $ एक और $ दो के समान नहीं है || $ तीन। इसके लिए धन्यवाद। – Zaptree

+1

@dtbarne @Zaptree: वास्तव में अलग-अलग प्राथमिकताओं के साथ दो विशिष्ट बूलियन और तार्किक ऑपरेटरों के लिए एक काफी सरल कारण है। '||' और '&&' का उपयोग संयोजक और वैकल्पिक बुलियन अभिव्यक्तियों के लिए किया जाता है, जबकि 'या' और' और 'का उपयोग '$ result = mysql_query (...) या मरने (mysql_error()) जैसे मामलों में किया जाता है;' (जो स्पष्ट रूप से खराब कोड है), यानी वे अधिक वैकल्पिक या तर्कसंगत तर्क हैं। – NikiC

3

ऐसा इसलिए है क्योंकि and&& और ?: से कम प्राथमिकता है।

+0

उत्तर के लिए धन्यवाद, आप जहां राडू से 1 सेकंड बाद: पी – Zaptree

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