2011-08-06 17 views
5

मैं कुछ दिलचस्प उपयोग में आया हूं || एक वापसी आदेश में ऑपरेटर, और यह जानना चाहेंगे अगर किसी को इस बात की पुष्टि कर सकता है पर वास्तव में क्या हो रहा है (अगर मैं इसे समझते हैं, मैं इसे अपने आप भविष्य में उपयोग कर सकते हैं)रिटर्न कमांड में OR (||) उपयोग की पुष्टि

कोड

 
    return (
     empty($neededRole) || 
     strcasecmp($role, 'admin') == 0 || 
     strcasecmp($role, $neededRole) == 0 
    ); 

$ neededRole है
तो $neededRole खाली है, आगे कोई जाँच करता है की जरूरत है: और $ भूमिका या तो अशक्त, 'व्यवस्थापक' या 'प्रबंधक'

मैं के रूप में यह पढ़ रहा हूँ कर रहे हैं। सत्य लौटें (और जांचना बंद करें)
यदि ($role == 'admin') तो पहुंच की अनुमति दें, चाहे आवश्यक भूमिका न हो।
अगर ($role == $neededRole) पर पहुंच की अनुमति दें तो सत्य (और जांचना बंद करें) वापस लौटें। वापसी (और जांचना बंद करें)

मुझे लगता है कि चेकिंग बंद होने पर 'सत्य' तक पहुंचने पर, और यदि यह 'सत्य' के बिना लाइन के अंत तक पहुंच गया है, तो यह गलत होगा।

क्या मैं चिह्न के करीब हूं?

+0

, जोड़ने के लिए अगर वहाँ इस तकनीक के लिए एक नाम है भूल एक उदाहरण देखें हैं, मैं आगे इस पर पढ़ें जानकर प्रसन्नता होगी –

उत्तर

7

हां, आप सही हैं। इसे short-circuit evaluation कहा जाता है। अंतिम वापसी मूल्य यदि सभी शर्तों को झूठ का मूल्यांकन false || false || false होगा जो गलत है।

एक साइड नोट के रूप में यह && ऑपरेटर के साथ भी काम करता है, लेकिन यह पहली अभिव्यक्ति के परिणाम false मान में मूल्यांकन रोकता है।

0

हाँ, आप सही

में manual

// foo() will never get called as those operators are short-circuit 
$a = (false && foo()); 
$b = (true || foo()); 
$c = (false and foo()); 
$d = (true or foo()); 
संबंधित मुद्दे