PHP ment.४ में ऑपरेटर = अशक्त सहूलियत क्या है?


10

मैंने अभी आगामी PHP 7.4 सुविधाओं के बारे में एक वीडियो देखा है और इस ??=नए ऑपरेटर को देखा है । मैं पहले से ही ??ऑपरेटर को जानता हूं । यह कैसे अलग है?

जवाबों:


10

से डॉक्स :

Coalesce बराबर या ?? = ऑपरेटर एक असाइनमेंट ऑपरेटर है। यदि बायाँ पैरामीटर अशक्त है, तो बाईं ओर दाईं पैरामिटर का मान असाइन करें। यदि मान शून्य नहीं है, तो कुछ भी नहीं किया जाता है।

उदाहरण:

// The folloving lines are doing the same
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';
// Instead of repeating variables with long names, the equal coalesce operator is used
$this->request->data['comments']['user_id'] ??= 'value';

तो यह मूल रूप से केवल एक आशुलिपि है अगर यह पहले असाइन नहीं किया गया है तो एक मान असाइन करें।


4
यह भी लगता है कि हमें आधिकारिक डॉक्स में एक टाइपो मिला। The folloving lines...
पावेल लिंट

यह 100% सटीक नहीं है कि 2 लाइनें "समान" कर रही हैं, दूसरे मामले में बाएं हाथ की तरफ केवल एक बार मूल्यांकन किया जाता है, इसलिए यह अधिक कुशल है
the_nuts

8

में पीएचपी 7 इस मूल रूप से जारी किया गया था, एक डेवलपर एक त्रिगुट ऑपरेटर के साथ संयुक्त एक isset () चेक सरल करने के लिए अनुमति देता है। उदाहरण के लिए, PHP 7 से पहले, हमारे पास यह कोड हो सकता है:

$data['username'] = (isset($data['username']) ? $data['username'] : 'guest');

जब PHP 7 जारी किया गया था, तो हमें इसे लिखने की क्षमता मिली:

$data['username'] = $data['username'] ?? 'guest';

अब, हालांकि, जब PHP 7.4 जारी किया जाता है, तो इसे और भी सरल बनाया जा सकता है:

$data['username'] ??= 'guest';

एक मामला जहां यह काम नहीं करता है यदि आप किसी भिन्न चर के लिए मान निर्दिष्ट करना चाहते हैं, तो आप इस नए विकल्प का उपयोग करने में असमर्थ होंगे। इस प्रकार, जबकि इसका स्वागत किया जाता है, कुछ सीमित उपयोग के मामले हो सकते हैं।


4

अशक्त coalescing असाइनमेंट ऑपरेटर null coalescing संचालक के परिणाम को असाइन करने का एक संक्षिप्त तरीका है।

आधिकारिक रिलीज़ नोट्स से एक उदाहरण :

$array['key'] ??= computeDefault();
// is roughly equivalent to
if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.