PHP में दोहरे प्रश्न चिह्न(??) ऑपरेटर का क्या मतलब है




operator-keyword symfony4 (3)

$x = $y ?? 'dev'

x = y के लिए छोटा हाथ है यदि y सेट है, अन्यथा x = 'dev'

वहाँ भी

$x = $y =="SOMETHING" ? 10 : 20

मतलब अगर y 'SOMETHING' के बराबर है तो x = 10, अन्यथा x = 20 है

इस सवाल का पहले से ही यहाँ एक जवाब है:

मैं सिम्फनी फ्रेमवर्क (संस्करण 4) कोड में गोता लगा रहा था और कोड की इस शांति को पाया:

$env = $_SERVER['APP_ENV'] ?? 'dev';

मुझे पूरा यकीन नहीं है कि यह वास्तव में क्या करता है लेकिन मुझे लगता है कि यह कुछ इस तरह फैलता है:

$env = $_SERVER['APP_ENV'] != null ? $_SERVER['APP_ENV'] : 'dev';

या हो सकता है:

$env = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : 'dev';

किसी को विषय के बारे में कोई सटीकता है?

संपादित करें:

उन सभी लोगों के लिए जिन्होंने इस प्रश्न का उत्तर दिया: धन्यवाद उन सभी लोगों के लिए जिन्होंने मेरे प्रश्न को नकारात्मक के रूप में चिह्नित किया है, क्योंकि पहले से ही एक समान प्रश्न है ( PHP टर्नरी ऑपरेटर बनाम अशक्त सहवर्ती ऑपरेटर ):

यह सच है कि दोनों प्रश्न बहुत समान हैं। हालाँकि हर किसी के लिए यह कल्पना करना कठिन है कि "??" कोलेसिंग ऑपरेटर कहा जाता है।

अन्यथा मैं इसे आसानी से आधिकारिक दस्तावेज पर पा सकता था:

http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

हालाँकि, किसी के लिए जो यह नहीं जानता था कि यह फीचर php 7 में जोड़ा गया है, इसके टाइप करने की संभावना अधिक है:

"php ?? ऑपरेटर" या "php डबल प्रश्न चिह्न ऑपरेटर"

और यहाँ क्यों मेरे सवाल का एक अतिरिक्त मूल्य है।

मैं आपसे पूछता हूं, कृपया, अपनी नकारात्मक प्रतिक्रिया पर पुनर्विचार करें। धन्यवाद

सादर, एपिक्लियोग


यह "शून्य coalescing ऑपरेटर", php 7.0 में जोड़ा गया है। यह कैसे काम करता है इसकी परिभाषा है:

यदि यह मौजूद है और NULL नहीं है तो यह अपना पहला ऑपरेंड लौटाता है; अन्यथा यह अपना दूसरा ऑपरेंड वापस करता है।

तो यह वास्तव में एक आसान ऑपरेटर में सिर्फ isset() है।

वे दो बराबर हैं:

$foo = $bar ?? 'something';
$foo = isset($bar) ? $bar : 'something';

दस्तावेज़: http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.coalesce

नई PHP7 सुविधाओं की सूची में: http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

और मूल RFC https://wiki.php.net/rfc/isset_ternary


$myVar = $someVar ?? 42;

के बराबर है :

$myVar = isset($someVar) ? $someVar : 42;

स्थिरांक के लिए, व्यवहार एक समान है जब एक स्थिरांक का उपयोग किया जाता है जो पहले से मौजूद है :

define("FOO", "bar");
define("BAR", null);

$MyVar = FOO ?? "42";
$MyVar2 = BAR ?? "42";

echo $MyVar . PHP_EOL;  // bar
echo $MyVar2 . PHP_EOL; // 42

हालांकि, स्थिरांक के लिए जो मौजूद नहीं है, यह अलग है:

$MyVar3 = IDONTEXIST ?? "42"; // Raises a warning
echo $MyVar3 . PHP_EOL;       // IDONTEXIST

चेतावनी : अपरिभाषित स्थिर IDONTEXIST का उपयोग - 'IDONTEXIST' मान लिया गया (यह PHP के भविष्य के संस्करण में एक त्रुटि फेंक देगा)

Php गैर-मौजूदा स्थिरांक को एक स्ट्रिंग में बदल देगा।

आप constant("ConstantName") उपयोग कर सकते हैं जो निरंतर या अशक्त का मान लौटाता है यदि निरंतर मौजूद नहीं है, लेकिन यह अभी भी चेतावनी बढ़ाएगा। चेतावनी संदेश को अनदेखा करने के लिए आप त्रुटि नियंत्रण ऑपरेटर @ साथ फ़ंक्शन को प्रस्तुत कर सकते हैं:

$myVar = @constant("IDONTEXIST") ?? "42"; // No warning displayed anymore
echo $myVar . PHP_EOL; // 42






symfony4