ट्रिपल-बराबर ऑपरेटर टाइप-संवेदी है। तो जब आप की जाँच करें:
if ($check === false)
... यह केवल सच हो सकता है अगर $check
बूलियन मान "गलत" है। वेरास
if ($check == false)
... विशेष रूप से बूलियन झूठी, लेकिन एक "झूठी" मान के लिए जांच नहीं कर रहा है। गलत, PHP में, शून्य के बराबर है, शून्य "झूठी" है, जैसा कि एक खाली स्ट्रिंग है ("" == false == null
, लेकिन "" !== false !== null
)। तो:
$check = 0;
if ($check == false)
... सत्य का मूल्यांकन करता है।
!
उपसर्ग ऑपरेटर ==
के बराबर है। तो जब शून्य को बूलियन झूठी से एक अलग मूल्य होना चाहिए, !
और ==
ऑपरेटर पर्याप्त नहीं हैं।
बाहर चेक तुलना ऑपरेटरों यहाँ डॉक्स: http://php.net/manual/en/language.operators.comparison.php
यह संभव के रूप में अपने सशर्त चेकों के रूप में विशिष्ट बनाने के लिए सबसे अच्छा अभ्यास है। यह न केवल आपके तर्क में संभावित oversights से बचने के लिए, बल्कि भविष्य के डेवलपर्स के लिए कोड को और अधिक बनाए रखने के लिए है।इस तरह कोड की एक पंक्ति का सामना कल्पना कीजिए:
if (check_something($variable)) {
// do stuff
}
मैं check_something
समारोह एक बूलियन मान सच लौटने मान सकते हैं। लेकिन, जब तक मैं check_something
फ़ंक्शन को खोदता नहीं जाता, तो यह भी एक गैर-खाली स्ट्रिंग लौटा रहा है, एक संख्या ... कौन जानता है! बहुत अधिक स्पष्ट यह करने के लिए:
if (check_something($variable) === true) {
// do stuff
}
अब, बस देख कर, मुझे पता है check_something
समारोह उम्मीद एक सही मूल्य वापस जाने के लिए है। मुझे नहीं पता कि समारोह क्या करता है, लेकिन कम से कम यह बिल्कुल स्पष्ट है कि यह क्या लौटाता है। एक और आम उदाहरण आप हर बार देखते हैं:
if (!$_GET['value']) {
// do something
}
यह एक पालतू शिखर है। एक सशर्त बयान हमेशा चीजों की तुलना स्पष्ट रूप से करना चाहिए। तो, आप क्या करना चाहते हैं:
if (array_key_exists('value', $_GET) !== false && $_GET['value'] === '1') {
// do something
}
अब, आप बता सकते हैं कि मैं केवल यदि क्वेरी स्ट्रिंग पैरामीटर मौजूद है देखने के लिए जाँच नहीं कर रहा हूँ, लेकिन यह भी है कि क्या यह एक विशिष्ट मूल्य के बराबर है।
सारांश में, एकल !
उपसर्ग ऑपरेटर और ==
ऑपरेटर शायद ही कभी उपयोगी और हमेशा अस्पष्ट हैं। आप अपने कोड को इस तरीके से लिखकर सबसे अच्छी तरह से सेवा कर रहे हैं कि दस्तावेज़ स्वयं ही हैं, या नाटक में तर्क व्यक्त करने के लिए मानव भाषा में अनुवाद योग्य है। !==
या ===
का उपयोग करके प्रत्यक्ष तुलना, जहां उचित हो, अच्छी आदत, अच्छी प्रैक्टिस और कम से कम आपके कोड में अप्रत्याशित परिणाम उत्पन्न करने की संभावना है।
बीटीडब्ल्यू, यह एक प्रकार से दूसरे प्रकार के मूल्यों को स्वचालित रूप से रूपांतरित करने की अत्यधिक इच्छा के कारण 'php' (और शायद अन्य ढीली टाइप की गई भाषाओं) के लिए विशिष्ट समस्या है। दृढ़ता से टाइप की गई भाषाओं (जैसे जावा, सी #, सी ++) में, अधिकांश प्रोग्रामर 'मूल्य == झूठी' या 'मूल्य === झूठी 'की बजाय संक्षिप्त वाक्यविन्यास जैसे'! Value' ("मूल्य नहीं") पसंद करते हैं। उन भाषाओं में, संकलक शिकायत करेगा अगर 'मूल्य' एक बूलियन प्रकार नहीं है, इसलिए संक्षिप्त रूप सुरक्षित है। 'मूल्य नहीं' 'तर्क और मानव भाषा दोनों में स्पष्ट अर्थ है; यह केवल 'php'' का "ढीलापन" है जो इस फ़ॉर्म को उपयोग करने के लिए खराब बनाता है। – ToolmakerSteve
^और जावास्क्रिप्ट को एक हद तक –