2010-11-18 16 views
20

मैं इस प्रकार एक सशर्त बयान है:पीएचपी लेज़ी बूलियन मूल्यांकन

if($boolean && expensiveOperation()){ ...} 

करता पीएचपी आलसी बूलियन मूल्यांकन है, यानी यह $boolean की जाँच करेगा और अगर यह गलत है महंगा कार्रवाई करते परेशान नहीं? यदि हां, तो मुझे अपने चर को किस क्रम में रखना चाहिए?

+0

मैं आम तौर पर कोड की एक ही पंक्ति में 2 आपरेशन डाल अगर वे स्वाभाविक संबंधित नहीं हैं से बचना होगा: आपका उदाहरण यह के समुचित उपयोग किया जाएगा। यह पठनीयता को मुश्किल बनाता है और आप कंप्यूटिंग समय या संसाधन प्राप्त नहीं करते हैं। –

+1

मेरे गलत उत्तर के लिए अपोल (अब हटा दिया गया)। मैंने सोचा कि मुझे यह कोशिश करने की याद आ रही है और यह पता नहीं चला कि यह काम नहीं करता है, लेकिन मुझे स्पष्ट रूप से गलत लगता है। –

+0

@Nathan कम से कम आपको पीयर प्रेशर बैज मिला है :) –

उत्तर

23

हां यह करता है। इसे शॉर्ट-सर्किट मूल्यांकन कहा जाता है। documentation page पर टिप्पणियां देखें ...

आदेश के लिए, यह Operator Precedence पर आधारित चेक करता है और फिर दाएं से दाएं। तो:

A || B || C 

एक पहला विल हमेशा का मूल्यांकन करेंगे, और फिर बी ही अगर एक झूठी है, और सी ही अगर दोनों ए और बी झूठे हैं ...

लेकिन

A AND B || C 

B || C का मूल्यांकन करें, क्योंकि ||AND से अधिक प्राथमिकता है (&& के लिए सही नहीं है)।

+0

यदि आप * गैर * शोर-सर्किट मूल्यांकन चाहते हैं तो आप एक एकल का उपयोग कर सकते हैं और जो एक बूलियन यूनियन फ़ंक्शन होगा। यह दोनों मानों की गणना करेगा और फिर उनके बीच एक और प्रदर्शन करने का प्रयास करेगा। – Mikhail

+8

@ मिखाइल: हाँ। लेकिन आपको सावधान रहना चाहिए क्योंकि गायक 'और वास्तव में एक बिट-वार ऑपरेटर है। तो 'सत्य और 2' गलत होगा (चूंकि 'सत्य' '00000001' है, और' 2' '00000010' है, इसलिए' AND' '00000000' होगा) ... – ircmaxell

+0

@Alin: धन्यवाद! बांध गूगल ने मुझे गलत दस्तावेज़ों में ले लिया ... जवाब में फिक्स्ड। धन्यवाद! – ircmaxell

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