कैसे PHP समानता (== डबल बराबर) और पहचान (=== ट्रिपल बराबर) तुलना ऑपरेटर भिन्न है?


Answers

ऑपरेटर == दो अलग-अलग प्रकार के बीच डाले हुए हैं यदि वे अलग-अलग हैं, जबकि === ऑपरेटर एक 'टाइपाइफ तुलना' करता है इसका मतलब है कि यह केवल सच ही वापस करेगा अगर दोनों operands एक ही प्रकार और एक ही मूल्य है

उदाहरण:

1 === 1: true
1 == 1: true
1 === "1": false // 1 is an integer, "1" is a string
1 == "1": true // "1" gets casted to an integer, which is 1
"foo" === "foo": true // both operands are strings and have the same value

चेतावनी : समकक्ष सदस्यों के साथ एक ही कक्षा के दो उदाहरण === ऑपरेटर से मेल नहीं खाते हैं। उदाहरण:

$a = new stdClass();
$a->foo = "bar";
$b = clone $a;
var_dump($a === $b); // bool(false)
Question

== और === बीच अंतर क्या है?

  • कैसे ढीले == तुलना काम करता है?
  • सख्त कैसे === तुलना काम करता है?

कुछ उपयोगी उदाहरण क्या होंगे?




एक के ऊपर एक का उपयोग करने के लिए के रूप में, उदाहरण के लिए PHP में fwrite() फ़ंक्शन ले।

यह फ़ंक्शन किसी फ़ाइल स्ट्रीम में सामग्री लिखता है। PHP के अनुसार, " fwrite() लिखित में बाइट्स की संख्या देता है, या त्रुटि पर गलत होता है।" यदि आप परीक्षण करना चाहते हैं कि फ़ंक्शन कॉल सफल था, तो यह विधि त्रुटिपूर्ण है:

if (!fwrite(stuff))
{
    log('error!');
}

यह शून्य (और सफल माना जाता है) लौटा सकता है, और आपकी स्थिति अभी भी ट्रिगर हो गई है। सही तरीका होगा:

if (fwrite(stuff) === FALSE)
{
    log('error!');
}



एक तस्वीर एक हजार शब्दों के बराबर होती है:

PHP डबल बराबर == समानता चार्ट:

PHP ट्रिपल बराबर === समानता चार्ट:

इन छवियों को बनाने के लिए स्रोत कोड:

https://github.com/sentientmachine/php_equality_charts

गुरु ध्यान

जो लोग अपनी विवेक रखने की इच्छा रखते हैं, वे आगे नहीं पढ़ते हैं।

  1. '==' जब संभव हो तो संख्याओं को छोड़ दिया और दायां कर्ता परिवर्तित करता है (123 == "123foo", लेकिन "123"! = "123foo"
  2. उद्धरण में एक हेक्स स्ट्रिंग कभी-कभी एक फ्लोट होती है और इसे आपकी इच्छा के विरुद्ध लगाया जाएगा।
  3. == संक्रमणीय नहीं है क्योंकि ("0" == से 0 है, और 0 है == "" लेकिन "0"! = "")
  4. "6" == "6", "4.2" == "4.20", और "133" == "0133" लेकिन 133! = 0133, क्योंकि 0133 ऑक्टल है। लेकिन "0x10" == "16" और "1e3" == "1000"
  5. PHP वेरिएबल्स जिन्हें अभी तक घोषित नहीं किया गया है वे गलत हैं।

  6. झूठी 0 के बराबर है, रिक्त सरणी और खाली सरणी और "0"।

  7. जब संख्याएं बड़ी होती हैं तो वे == अनंत हैं
  8. NAN खुद नहीं ==, लेकिन यह सच है

  9. एक ताजा वर्ग == 1 है

  10. झूठी सबसे खतरनाक मान है क्योंकि कई अन्य चर के कारण झूठी है ==, ज्यादातर इसे अपने उद्देश्य को हराते हैं

आशा है कि:

यदि आप PHP का उपयोग कर रहे हैं, तो तू डबल बराबर ऑपरेटर का उपयोग नहीं करेगा, हमेशा ट्रिपल बराबर का उपयोग करें।




उदाहरणों में से कुछ

var_dump(5 == 5);    // True
var_dump(5 == "5");  // True because == checks only same value not type
var_dump(5 === 5);   // True
var_dump(5 === "5"); // False because value are same but data type are different.

पुनश्च

== केवल मूल्य की तुलना करता है, यह डेटा प्रकारों के बारे में परेशान नहीं करेगा

बनाम

=== मूल्यों और डेटा प्रकारों की तुलना करता है




सरल शब्दों में:

== चेक अगर समकक्ष (केवल मान)

=== जांचता है कि क्या एक ही है (मान && प्रकार)


समरूप बनाम एक ही: एक अनुरूपता

1 + 1 = 2 + 0 (बराबर)

1 + 1 = 1 + 1 (समान)


PHP में:

सच == 1 (सच - मूल्य में समतुल्य)

सच === 1 (झूठी - वही और वही प्रकार में नहीं)

  • सच बुलियन है
  • 1 पूर्णांक है



$a = 5;   // 5 as an integer

var_dump($a == 5);       // compare value; return true
var_dump($a == '5');     // compare value (ignore type); return true
var_dump($a === 5);      // compare type/value (integer vs. integer); return true
var_dump($a === '5');    // compare type/value (integer vs. string); return false

हालांकि सावधान रहें यहाँ एक कुख्यात समस्या है

// 'test' is found at position 0, which is interpreted as the boolean 'false'
if (strpos('testing', 'test')) {
    // code...
}

बनाम

// true, as strict comparison was made (0 !== false)
if (strpos('testing', 'test') !== false) {
    // code...
}



एक उदाहरण यह है कि डेटाबेस विशेषता शून्य या "" हो सकती है:

$attributeFromArray = "";
if ($attributeFromArray ==  ""){}  //true
if ($attributeFromArray === ""){}  //true
if ($attributeFromArray ==  null){}  //true
if ($attributeFromArray === null){}  //false

$attributeFromArray = null;
if ($attributeFromArray ==  ""){}  //true
if ($attributeFromArray === ""){}  //false
if ($attributeFromArray ==  null){}  //true
if ($attributeFromArray === null){}  //true



=== ऑपरेटर को सटीक सामग्री समानता की तुलना करना चाहिए, जबकि == ऑपरेटर अर्थ की समानता की तुलना करेगा। विशेष रूप से यह संख्याओं को स्ट्रिंग को बल देगा।

समानता एक विशाल विषय है समानता पर विकिपीडिया लेख देखें




PHP एक ढीले टाइप की गई भाषा है डबल बराबर ऑपरेटर का प्रयोग करके एक चर की ढीली जांच की जा सकती है।

ढीले से एक मूल्य की जांच कुछ समान की अनुमति होगी, लेकिन बराबर नहीं, मूल्य समान के समान होगा:

  • ''
  • शून्य
  • असत्य
  • 0

इन सभी मूल्यों को दो बराबर ऑपरेटर के बराबर समान समीकरण होगा।