2010-11-02 10 views
5

संभावित डुप्लिकेट:
How do the equality (== double equals) and identity (=== triple equals) comparison operators differ?
Reference - What does this symbol mean in PHP?
php not equal to != and !==क्या करें! == और === PHP में क्या मतलब है?

इस कोड स्निपेट में !== और === ऑपरेटरों क्या हैं?

if ($a !== null) // do something 
if ($b === $a) // do something 
+8

http://www.php.net/manual/en/language.operators.comparison.php – mbeckish

+8

यह वास्तव में दुर्भाग्यपूर्ण है कि SO खोज इंजन '===' के लिए काम नहीं करता है क्योंकि यह प्रश्न महीने में एक बार पूछता है। –

+0

सबसे अच्छे उत्तरों में से एक टिप्पणी के रूप में प्रदान किया गया है xD –

उत्तर

6

द्वारा प्रदान किए गए this link को भी देखें, वे सख्त प्रकार तुलना ऑपरेटर हैं। वे केवल मूल्य लेकिन यह भी प्रकार की जांच नहीं।

if (4 === 4) // same value and type 
{ 
    // true 
} 

लेकिन

if (4 == "4") // same value and different type but == used 
{ 
    // true 
} 

और

if (4 === "4") // same value but different type 
{ 
    // false 
} 

यह वस्तुओं के साथ-साथ सरणियों पर लागू होता है: जब आप नंबर या तार तुलना

एक स्थिति पर विचार करें।

तो ऊपर मामलों में, आप == या ===

यह है अच्छा विचार उपयोग करने के लिए है कि क्या === उपयोग करने के लिए जब आप के रूप में अच्छी प्रकार के बारे में निश्चित हैं

अधिक जानकारी समझदार विकल्प बनाने के लिए है:

1

=== चर के प्रकार के लिए भी जांचता है।

उदाहरण के लिए, "1" == 1 सत्य लौटाता है लेकिन "1" === 1 झूठा रिटर्न देता है। यह fonctions कि वापस आ सकते हैं 0 या गलत (उदाहरण के लिए strpos) के लिए विशेष रूप से उपयोगी है।

यह सही ढंग से काम नहीं करेंगे, क्योंकि strpos रिटर्न 0 और 0 == झूठी

if (strpos('hello', 'hello world!')) 

लेकिन यह काम करेगा:

if (strpos('hello', 'hello world!') !== false) 
+0

यह उत्तर सही है, लेकिन मैं एक उदाहरण जोड़ने जा रहा हूं। 'strpos (" abcde "," f ") '' false' लौटाता है, क्योंकि 'f' स्ट्रिंग' abcde' में नहीं है। आप इसके लिए परीक्षण करना चाह सकते हैं, इसलिए आप 'if (strpos ("abcde", "f") === false) का उपयोग करेंगे। यदि आपने बस 'if (! (स्ट्रॉप्स ("abcde", "f") किया है)) तो स्ट्रॉप्स वास्तव में' 0' लौटाए जाने पर आपको परेशानी होगी। क्यूं कर? चूंकि PHP को कम से कम टाइप किया गया है और '0'0 और' false' समकक्ष हैं जब प्रकारों की तुलना भी नहीं की जाती है। – Brad

13

वे पहचान तुल्यता ऑपरेटरों रहे हैं।

1 == 1 
1 == "1" 
1 === 1 
1 !== "1" 
true === true 
true !== "true" 
true == "true" 

ये सभी सत्य के बराबर हैं। @mbeckish

+2

हालांकि मैं इसे पहचान नहीं कहूंगा, क्योंकि एक अलग पहचान वाले दो ऑब्जेक्ट्स में अभी भी वही मान और एक ही प्रकार हो सकता है (और '===' इस तरह के बराबर हो)। Php में केवल * पहचान * नहीं है। – poke

+0

यह समकक्ष ऑपरेटर है। यह दावा करता है कि दोनों "तर्क" (बाएं और दाहिने तरफ) दोनों समान और समान प्रकार के होते हैं (और यदि कोई वस्तु, एक ही कक्षा)। – ircmaxell

0

एक डबल = चिह्न एक तुलना और परीक्षण है चर/अभिव्यक्ति/बाईं ओर निरंतर परिवर्तनशील/अभिव्यक्ति/सही करने के लिए निरंतर रूप में एक ही मूल्य है या नहीं।

एक ट्रिपल = साइन यह देखने के लिए एक तुलना है कि दो चर/एक्सपेशंस/स्थिरांक बराबर हैं और समान प्रकार हैं - यानी दोनों स्ट्रिंग हैं या दोनों पूर्णांक हैं।

इसी अवधारणा! ==

0

वे ही सच्चा वापस आ जाएगी अगर दोनों प्रकार और दिए गए मूल्यों के मूल्य के बराबर हैं के लिए लागू होता है। उदाहरण: 1 === 1 सच है "1" === 1 गलत है 1 === "1" झूठी "1" === "1" सत्य है

जहां के साथ के रूप में == उपर्युक्त सभी सत्य होंगे

0

जब आप दो बराबर संकेत == का उपयोग करते हैं तो यह वही मान की जांच करेगा।

if('1' == 1) { echo 'yes'; } 

उपरोक्त कोड काम करता है क्योंकि उनके पास समान मूल्य है।

लेकिन यदि आप तीन बराबर संकेत === का उपयोग करते हैं तो यह मूल्य और डेटा प्रकार की जांच करेगा।

इसलिए

if('1' === 1) { /* this will not work */ } 

इसका कारण यह है '1' की string जबकि 1 है एक integer या एक number

एक डेटा प्रकार है लेकिन आप कुछ इस तरह कर सकता है - मुझे लगता है कि: डी

if((integer) '1' === 1) { echo 'this works'; } 

क्योंकि हम डेटा प्रकारबदल रहे हैंसे integer

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