जवाबों:
आप क्या देख रहे हैं:
if($variable === NULL) {...}
ध्यान दें ===
।
उपयोग करते समय ==
, जैसा कि आपने किया था, PHP NULL , गलत , 0 , खाली स्ट्रिंग और खाली सरणियों को समान मानता है ।
== null
था , वे सोच रहे थे कि क्यों रिक्त स्ट्रिंग का मिलान किया गया था और न केवल अशक्त या अपरिभाषित था।
$a = ''
एक खाली है string
, false
एक बूलियन है, $a = 0;
एक पूर्णांक है और null
प्रकार से है null
। ओपी जो बता रहा है कि PHP उन्हें मूल्य में "समान" के रूप में थ्रेड करेगा, लेकिन प्रकार में "समान" के रूप में नहीं। तो एक सख्त ===
जांच भी प्रकार की जांच करेगी और यदि आप अलग-अलग का उपयोग करते हैं तो असफल हो जाते हैं। यही कारण है कि आपको अपने रिटर्न मूल्यों में निरंतरता होनी चाहिए। यदि आप सामान्य रूप से किसी स्ट्रिंग को किसी विधि में लौटाते हैं getName()
, तो आपको null
खाली होने पर नहीं मिलना चाहिए , लेकिन अधिक संभावना है कि एक एमटी स्ट्रिंग $user->getName() === ''
या $user->getId() === 0
या $user->isActive === false
। इरादा व्यवहार!
जैसा कि निम्नलिखित तालिका में दिखाया गया है, empty($foo)
के बराबर है $foo==null
और is_null($foo)
इसका एक ही कार्य है $foo===null
। तालिका null
तुलना के संबंध में कुछ मुश्किल मूल्यों को भी दिखाती है । (itial एक असिंचित चर को दर्शाता है।)
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
मैं कभी उपयोग नहीं करता empty()
और is_null()
कार्य करता हूं । सरल तुलना का उपयोग करना कम अस्पष्ट, तेज और क्लीनर है। विशेष रूप से मिलान करने के लिए कम घुंघराले कोष्ठक होंगे।
जैसे if($x==null || $y==null)
बनामif(is_null($x) || is_null($y))
==null
और ===null
।
चेक ==
बनाम===
'' == NULL
सच
0 == NULL
लौटेगा तो सही
false == null
लौटेगा, सही लौटेगा
जहाँ तक
'' === NULL
झूठे
0 === NULL
लौटेंगे झूठे
false === NULL
वापस आएंगे झूठे वापस आएंगे
नहीं, यह बग नहीं है। == तालिका (दूसरी तालिका) के साथ तुलनाओं पर एक नज़र डालें , जो दूसरे कॉलम में मानों के साथ पहले कॉलम में प्रत्येक मान की तुलना करने का परिणाम दिखाता है:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
वहां आप देख सकते हैं कि एक खाली स्ट्रिंग ""
की तुलना false
में 0
, NULL
या ""
सही उपज होगी।
आप इसके बजाय is_null
[डॉक्स] या सख्त तुलना (तृतीय तालिका) का उपयोग करना चाहते हैं ।
0
डालने पर परिवर्तित किया जाता है : codepad.org/qi40SG3E । तो (int)"php" == 0
।
यह बग नहीं बल्कि PHP सामान्य व्यवहार है। ऐसा इसलिए होता है क्योंकि ==
PHP में ऑपरेटर प्रकार के लिए जाँच नहीं करता है।
'' == null == 0 == false
यदि आप यह भी जांचना चाहते हैं कि क्या मान एक ही प्रकार के हैं, तो ===
इसके बजाय उपयोग करें । इस अंतर का गहराई से अध्ययन करने के लिए, कृपया आधिकारिक दस्तावेज पढ़ें ।
का प्रयोग करें empty
- http://php.net/manual/en/function.empty.php ।
उदाहरण:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable
। आप जो चाहते हैं वह वास्तव में है:$variable == null
(ध्यान दें==
)