2016-04-06 9 views
12

सबसे पहले इस अभिव्यक्ति के लिए नाम है?जावास्क्रिप्ट `var a = var1 || var2 || var3; 'अभिव्यक्ति

जावास्क्रिप्ट

var value = false || 0 || '' || !1 || 'string' || 'wont get this far'; 

value के बराबर होती है string (स्ट्रिंग) पांचवें विकल्प उर्फ ​​

पीएचपी

$value = false || 0 || '' || !1 || 'string' || 'wont get this far'; 

$value के बराबर होती है true (bool)

मैं सही सोच में हूंजावास्क्रिप्ट टर्नरी ऑपरेटरों को घोंसले के समान परिणाम प्राप्त करने का सही तरीका है? सबसे अच्छा समाधान क्या है?

+1

यह 'है only..Test TRUE'' सच गूंज; ' – Rayon

+0

आप की जाँच [इस] (http://stackoverflow.com/questions/5694733/does-php-have-short-circuit चाहते हो सकता है अवमूल्यन) बाहर। –

+3

जेएस में उन्हें शॉर्ट सर्किट मूल्यांकन कहा जाता है – Xufox

उत्तर

15

PHP में बराबर ऑपरेटर ?: है, जो मध्य भाग के बिना ternary operator है:

$value = false ?: 0 ?: '' ?: !1 ?: 'string' ?: 'wont get this far'; 

$a ?: $b$a ? $a : $b के लिए आशुलिपि है।

+0

मुझे लगता है कि सवाल टर्नरी ऑपरेटर के बारे में नहीं है। लेकिन ओपी ने शॉर्ट-सर्किट मूल्यांकन के बजाय उलझन में टर्नरी ऑपरेटर कहा। –

+1

जावास्क्रिप्ट में '|| रिटर्न * इसके संचालन * में से एक, बूलियन नहीं। PHP में ऐसा करने का समकक्ष तरीका '?:' है। प्रश्न का उत्तर दिया। – deceze

+0

स्पष्टीकरण के लिए धन्यवाद। मैं कुछ और मान रहा था। –

1

यह परीक्षण false || 0 || '' || !1 || true || 'wont get this far' एक बूलियन मान लौटाएगा। यह true वापस करेगा यदि कोई मान true है, तो OR काम करता है। यह एक टर्नरी अभिव्यक्ति नहीं है, जो प्राप्त करने वाले चर के पहले मान्य मान को लागू करता है।

यह 1 PHP पर लौटाता है क्योंकि आपने अभिव्यक्ति को बूलियन के रूप में नहीं डाला था।

आप ऐसा कर सकता है अभिव्यक्ति बनाने के लिए अपने PHP चर में पूर्णांक के बजाय एक बूलियन मान लौट:

$value = (bool)(false || 0 || '' || !1 || true || 'wont get this far');` 

वापसी true हो जाएगा।

+0

* "' .. || .. 'एक बुलियन मान वापस करेगा ... "*, *" अभिव्यक्ति को एक बूलियन मान वापस करने के लिए आप ऐसा कर सकते हैं ... "* - जो यह है? क्या '|| 'एक बुलियन लौटाता है या नहीं? – deceze

+0

यह एक बुलियन लौटाता है, लेकिन सीधे एक चर में नहीं, PHP में नहीं। मुझे दो डाउनवॉट नहीं मिलते हैं, लेकिन ठीक है – Phiter

+0

वट? या तो यह एक बूलियन देता है या यह नहीं करता है। इसमें कोई फर्क नहीं पड़ता कि आप रिटर्न वैल्यू को एक चर में निर्दिष्ट करते हैं या नहीं। एक मूल्य एक मूल्य है। '||' के बुलियन रिटर्न वैल्यू को कास्टिंग करके कोई और बूलियन नहीं मिलेगा। – deceze

1

यदि आप PHP 5.3 या उच्चतर का उपयोग कर रहे हैं तो deceze's answer देखें।

अन्यथा आप नेस्टेड नियमित टर्नरी ऑपरेटरों का उपयोग कर सकते हैं।

$value = (false ? false : (0 ? 0 : ('' ? '' : (!1 ? !1 : ('string' ? 'string' : ('wont get this far' ? 'wont get this far' : null)))))); 

वाह बदसूरत है।

आप इसके बजाय मूल्यों की एक सरणी का उपयोग कर सकते हैं;

$array = array(false,0,'',!1,'string','wont get this far')); 

अब एक फ़ंक्शन बनाएं जो सरणी पर पुनरावृत्त करता है और पहला वास्तविक मान देता है।

function array_short_circuit_eval($vars = array()){ 
    foreach ($vars as $var)if($var)return $var;return null; 
} 

$value = array_short_circuit_eval($array); 

echo $value; // string 
+0

'$ value = current (array_filter (सरणी (झूठी, 0, ...)) '- मुझे आशा है कि किसी को भी इसका उपयोग करने की आवश्यकता नहीं है, लेकिन यहां यह है ... – deceze

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