PHP: ऑपरेटर('एल्विस ऑपरेटर') PHP में




coding-style conditional-operator (4)

मैंने आज इसे कुछ PHP कोड में देखा:

$items = $items ?: $this->_handle->result('next', $this->_result, $this);

मैं परिचित नहीं हूँ ?: ऑपरेटर का इस्तेमाल यहां किया जा रहा है। यह एक टर्नरी ऑपरेटर की तरह दिखता है, लेकिन भविष्यवाणी करने के लिए अभिव्यक्ति की अभिव्यक्ति को छोड़ दिया गया है। इसका क्या मतलब है?


एक अन्य महत्वपूर्ण विचार: एल्विस ऑपरेटर ज़ेंड ओपेकैके टोकननाइज़ेशन प्रक्रिया को तोड़ देता है। मुझे यह मुश्किल तरीका मिला! हालांकि यह बाद के संस्करणों में तय किया गया हो सकता है, मैं पुष्टि कर सकता हूं कि यह समस्या PHP 5.5.38 (अंतर्निर्मित ज़ेंड ओपेकैच v7.0.6-dev के साथ) में मौजूद है।

यदि आपको लगता है कि आपकी कुछ फाइलें 'इनकार करने' को ज़ेंड ओपेकैच में कैश करने के लिए हैं, तो यह कारणों में से एक हो सकता है ... उम्मीद है कि इससे मदद मिलती है!


यह बाएं ऑपरेंड का मूल्यांकन करता है यदि बाएं ऑपरेंड truthy , और सही ऑपरेशन अन्यथा।

छद्म कोड में,

foo = bar ?: baz;

मोटे तौर पर हल करता है

foo = bar ? bar : baz;

या

if (bar) {
    foo = bar;
} else {
    foo = baz;
}

इस अंतर के साथ कि bar का मूल्यांकन केवल एक bar जाएगा।

आप इसे पोस्ट किए गए कोड उदाहरण में दिखाए गए foo "स्वयं-जांच" करने के लिए भी इसका उपयोग कर सकते हैं:

foo = foo ?: bar;

अगर foo शून्य या गलत है तो यह bar को foo को असाइन करेगा, अन्यथा यह अपरिवर्तित foo को छोड़ देगा।

कुछ और उदाहरण:

<?php
    var_dump(5 ?: 0); // 5
    var_dump(false ?: 0); // 0
    var_dump(null ?: 'foo'); // 'foo'
    var_dump(true ?: 123); // true
    var_dump('rock' ?: 'roll'); // 'rock'
?>

वैसे, इसे एल्विस ऑपरेटर कहा जाता है।


हां, यह PHP 5.3 में नया है। यह परीक्षण अभिव्यक्ति का मान देता है यदि इसका मूल्यांकन TRUE के रूप में किया जाता है, या वैकल्पिक मान यदि इसे FALSE के रूप में मूल्यांकन किया जाता है।


दस्तावेज़ देखें:

PHP 5.3 के बाद से, टर्नरी ऑपरेटर के मध्य भाग को छोड़ना संभव है। अभिव्यक्ति expr1 ?: expr3 देता है अगर expr1 TRUE मूल्यांकन करता है, और अन्यथा expr3







language-construct