मुझे पता है कि यह एक पुराना विषय है लेकिन फिर भी। मैं सिर्फ उस कोड में समस्या से मिला हूं जिसे मैं काम पर डिबग कर रहा हूं और हो सकता है कि किसी को भी इसी तरह का मुद्दा हो ...
मान लीजिए कि कोड इस तरह दिखता है:
$positions = $this->positions() || [];
आप उम्मीद करेंगे (जैसे कि आप जावास्क्रिप्ट से उपयोग किए जाते हैं) कि जब $ यह-> स्थिति () गलत या अशक्त देता है, तो $ स्थिति खाली सरणी है। लेकिन ऐसा नहीं है। मान TRUE है या FALSE इस बात पर निर्भर करता है कि यह कितना $ है -> स्थिति () रिटर्न।
यदि आपको $ इस-> पदों () या खाली सरणी का मूल्य प्राप्त करने की आवश्यकता है, तो आपको उपयोग करना होगा:
$positions = $this->positions() or [];
संपादित करें:
ऊपर के उदाहरण के रूप में नहीं काम करता है, लेकिन सच्चाई यह है कि है ||
और or
एक ही नहीं है ... इस प्रयास करें:
<?php
function returnEmpty()
{
//return "string";
//return [1];
return null;
}
$first = returnEmpty() || [];
$second = returnEmpty() or [];
$third = returnEmpty() ?: [];
var_dump($first);
var_dump($second);
var_dump($third);
echo "\n";
यह परिणाम है:
bool(false)
NULL
array(0) {
}
तो, वास्तव में तीसरा विकल्प ?:
सही समाधान है जब आप लौटे मूल्य या खाली सरणी सेट करना चाहते हैं।
$positions = $this->positions() ?: [];
PHP 7.2.1 के साथ परीक्षण किया गया
$e = true || $x = 'foo'
परिभाषित नहीं होगा$x
, न कि उच्च पूर्वता के कारण।