2011-06-03 14 views
16

बस एक त्वरित सवाल - और मुझे यकीन है कि वास्तव में बुनियादी है!PHP - वापसी झूठी के लिए जांच;

मैं निम्नलिखित कोड है:

function checkThings($foo, $bar) { 
    ... 
    if ($valid) { 
     return $results; 
    } else { 
     return false; 
    } 
} 

इस के दूसरे छोर पर मैं वर्तमान में

$check = checkThings($foo, $bar); 
if ($check === false) { 
    echo "Error"; 
} else { 
    echo $check; 
} 

लेखन है एक ही निम्न कर रहा हूँ?

$check = checkThings($foo, $bar); 
if (!$check) { 
    echo "Error"; 
} else { 
    echo $check; 
} 

यदि दोनों सही हैं तो पसंदीदा विधि कौन सी विधि है?

धन्यवाद :)

उत्तर

41

ट्रिपल-बराबर ऑपरेटर टाइप-संवेदी है। तो जब आप की जाँच करें:

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 
} 

अब, आप बता सकते हैं कि मैं केवल यदि क्वेरी स्ट्रिंग पैरामीटर मौजूद है देखने के लिए जाँच नहीं कर रहा हूँ, लेकिन यह भी है कि क्या यह एक विशिष्ट मूल्य के बराबर है।

सारांश में, एकल ! उपसर्ग ऑपरेटर और == ऑपरेटर शायद ही कभी उपयोगी और हमेशा अस्पष्ट हैं। आप अपने कोड को इस तरीके से लिखकर सबसे अच्छी तरह से सेवा कर रहे हैं कि दस्तावेज़ स्वयं ही हैं, या नाटक में तर्क व्यक्त करने के लिए मानव भाषा में अनुवाद योग्य है। !== या === का उपयोग करके प्रत्यक्ष तुलना, जहां उचित हो, अच्छी आदत, अच्छी प्रैक्टिस और कम से कम आपके कोड में अप्रत्याशित परिणाम उत्पन्न करने की संभावना है।

+1

बीटीडब्ल्यू, यह एक प्रकार से दूसरे प्रकार के मूल्यों को स्वचालित रूप से रूपांतरित करने की अत्यधिक इच्छा के कारण 'php' (और शायद अन्य ढीली टाइप की गई भाषाओं) के लिए विशिष्ट समस्या है। दृढ़ता से टाइप की गई भाषाओं (जैसे जावा, सी #, सी ++) में, अधिकांश प्रोग्रामर 'मूल्य == झूठी' या 'मूल्य === झूठी 'की बजाय संक्षिप्त वाक्यविन्यास जैसे'! Value' ("मूल्य नहीं") पसंद करते हैं। उन भाषाओं में, संकलक शिकायत करेगा अगर 'मूल्य' एक बूलियन प्रकार नहीं है, इसलिए संक्षिप्त रूप सुरक्षित है। 'मूल्य नहीं' 'तर्क और मानव भाषा दोनों में स्पष्ट अर्थ है; यह केवल 'php'' का "ढीलापन" है जो इस फ़ॉर्म को उपयोग करने के लिए खराब बनाता है। – ToolmakerSteve

+0

^और जावास्क्रिप्ट को एक हद तक –

4

वे समान हैं, लेकिन बिल्कुल वही नहीं हैं। !$check एक ढीला चेकर है, जिसका अर्थ है 0 और null भी सत्य का मूल्यांकन करेगा। === एक सख्त जांचकर्ता है, जिसका अर्थ है कि यह false होना चाहिए।

एक और अधिक गहराई से स्पष्टीकरण के लिए: (! $ जांच) PHP Types Comparisons

7

=== झूठे चेकों प्रकार, मूल्य का मूल्यांकन करता है और मूल्यों के लिए इस तरह के अशक्त, '' (खाली स्ट्रिंग) और शून्य (0 के रूप में वापस असफल हो जायेगी)

=== सबसे सही

-1

== एक मूल्य तुलना जहां === एक बिटवाइज़ करता है है।

// will return true only when $value = false 
if($value === false) 

// will return true when $value = 0, $value = "", $value = null, etc 
if($value == false) 
if(!$value) 
+1

'===' तुलना मूल्य और 2 चीजों का प्रकार। यह 'bitwise' नहीं है। –

+0

@ रॉकेट से सहमत हैं - यह गलत है –

+0

यह पहली बार है जब मैंने === ऑपरेटर के बारे में 'bitwise' के बारे में सुना। अधिक जानकारी सहायक हो सकती है। – JohnnyQ

0

मैं आपकी दूसरी विधि पसंद करूंगा, लेकिन सकारात्मक जांच पहले (अगर ($ चेक) डाल दें)।

+0

यह '! $ चेक' का उपयोग करने के समान कारणों से विफल हो जाएगा। उसे वास्तव में '$ चेक का उपयोग करना चाहिए! == गलत '। –

संबंधित मुद्दे