3 अलग बराबर


149

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

मुझे लगता है कि एक समान चिह्न का उपयोग एक चर घोषित करना है जबकि दो समान संकेत तुलनात्मक स्थिति के लिए हैं और अंतिम रूप से तीन समान चिह्न घोषित चर के मूल्यों की तुलना करने के लिए हैं।


उदाहरण देखें ... मैंने पोस्ट किया है कि यह और अधिक स्पष्ट करेगा ..
शिशुप्रधान 'अरविंद'

1
उन्नत PHP उपयोगकर्ताओं के लिए, == और === के बीच के अंतर को जानना और खुद से पूछना "क्या यह == या === के साथ तुलना करने के लिए तेज़ है जब मुझे यकीन है कि दोनों ऑपरेंड एक ही प्रकार हैं?", कृपया देखें नीचे मेरी बेंचमार्क स्क्रिप्ट पर।
लुकाफेरो जूल

@ स्ट्राबेरी मुझे लगता है कि प्रश्न के टैग में जावास्क्रिप्ट टैग भी शामिल होना चाहिए क्योंकि यह उस भाषा पर भी लागू होता है।
फंकी फोर्टे निनेर

(अपडेट): मैंने जावास्क्रिप्ट टैग को एक एडिट में जोड़ा है, क्योंकि बहुत सारे सवाल हैं जहाँ लोग =जावास्क्रिप्ट में इस्तेमाल कर रहे थे । यह न केवल PHP बल्कि अन्य भाषाओं पर भी लागू होता है।
फंक फोर्टी निनेर

मैंने जावास्क्रिप्ट टैग को आगे बढ़ाया और हटा दिया: यहाँ सभी उत्तर केवल PHP के बारे में हैं (नवीनतम को छोड़कर जो बहुत कमजोर है), इस बात के बीच मतभेद हैं कि भाषाएं इसे कैसे संभालती हैं, और पहले से ही एक समान de वास्तविक विहित जावास्क्रिप्ट प्रश्न है ( जो बराबर है ऑपरेटर (== बनाम ===) का उपयोग जावास्क्रिप्ट तुलना में किया जाना चाहिए? )।
JJJ

जवाबों:


172

आपके पास असाइनमेंट ऑपरेटर , 'बराबर' तुलना ऑपरेटर और 'समान' तुलना ऑपरेटर======

$a = $b     Assign      Sets $a to be equal to $b.
$a == $b    Equal       TRUE if $a is equal to $b.
$a === $b   Identical   TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4)

प्रत्येक का उपयोग करने के लिए ==और ===, और स्थितियों की आवश्यकता के बारे में अधिक जानकारी के लिए , डॉक्स देखें


जब मैं दो समान डेटाटाइम की तुलना करता हूं, तो मेरे पास गलत परिणाम है, क्यों? उदाहरण: sandbox.onlinephpfunctions.com/code/…
stloc

3
@stloc, ===ऑब्जेक्ट्स के साथ आपको बताता है कि क्या वे एक ही वस्तु हैं, न कि यदि उनके पास समान सामग्री है।
एंड्रिया २

PHP4, Y2018 में अजीब में ;-) शुरू की
mvorisek

22
  • = असाइनमेंट ऑपरेटर है
  • == तुलना ऑपरेटर है (यदि दो चर समान मान हैं तो जाँचें)
  • === समरूप तुलना ऑपरेटर है (दो चर समान मान हैं और जाँचता है)।

8

= असाइनमेंट ऑपरेटर

== जाँच करता है कि क्या दो चर का एक ही मूल्य है

=== चेक करता है कि क्या दो वेरिएबल्स का मान समान है और यदि उनके प्रकार समान हैं


1
दो तुलना ऑपरेटरों के संस्करणों के बारे में भी जानें! =! और = == 'नहीं'। कुछ भाषाएं उपयोग करती हैं: = असाइनमेंट के रूप में, इस तरह के भ्रम से बचने के लिए।
फिल पेरी

3

= ऑपरेटर किसी वैरिएबल को $ ६ = ६ का मान प्रदान करता है; मान 6 को चर छह डॉलर में सौंपा गया है

== ऑपरेटर की जाँच करें कि क्या दोनों चर का मान बराबर है और ज्यादातर अगर बयान की तरह स्थितियों में उपयोग किया जाता है

$a = 2;
$b = 2;
if ($a == $b) { 
    echo both variables have the same value; 
}

=== ऑपरेटर == के समान है (यदि मान बराबर है) और यह भी जांचें कि क्या दोनों समान डेटा प्रकार हैं

$a = 2;
$b = "2";
if ($a === $b) {
    echo "both variable have same value and of same data type";
} else {
    echo 'both variable is either not equal or not of same data type';
}

// यहाँ $ a प्रकार का int है जबकि $ b टाइप स्ट्रिंग का है। तो यहाँ उत्पादन


0

उन्नत PHP उपयोगकर्ताओं के लिए, और खुद के बीच अंतर जानने ==और ==="क्या यह सुनिश्चित करने के लिए ==या ===जब मुझे यकीन है कि दोनों ऑपरेंड एक ही प्रकार हैं?"

संक्षिप्त और सामान्य उत्तर है: इस मामलों में उपयोग करने में कोई प्रदर्शन लाभ नहीं है ===, इसलिए आपको संभवतः उपयोग करना चाहिए ==

यह खुद को बेंचमार्किंग में रुचि रखने वाले लोगों के लिए, आप निम्न कोड मैं तदर्थ लिखा का उपयोग करें और के लिए अलग मान कोशिश कर सकते हैं $aऔर $b:

<?php
    // CONFIGURATION
    $cycles = 1000000;
    $a = 'random string 1';
    $b = 'random string 2';

    // FUNCTIONS
    function compare_two_equals($a, $b) {
        if ($a == $b) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    function compare_three_equals($a, $b) {
        if ($a === $b) {
            return TRUE;
        } else {
            return FALSE;
        }
    }

    // EXECUTION
    $time = microtime(TRUE);
    for ($count_a = 0; $count_a < $cycles; $count_a++) {
        compare_two_equals($a, $b);
    }
    $time_two_a = microtime(TRUE) - $time;
    $time = microtime(TRUE);
    for ($count_a = 0; $count_a < $cycles; $count_a++) {
        compare_three_equals($a, $b);
    }
    $time_three_a = microtime(TRUE) - $time;
    $time = microtime(TRUE);
    for ($count_a = 0; $count_a < $cycles; $count_a++) {
        compare_two_equals($a, $b);
    }
    $time_two_b = microtime(TRUE) - $time;
    $time = microtime(TRUE);
    for ($count_a = 0; $count_a < $cycles; $count_a++) {
        compare_three_equals($a, $b);
    }
    $time_three_b = microtime(TRUE) - $time;
    $time = microtime(TRUE);

    // RESULTS PRINTING
    print "<br />\nCOMPARE == (FIRST TRY): " . number_format($time_two_a, 3) . " seconds";
    print "<br />\nCOMPARE == (SECOND TRY): " . number_format($time_two_b, 3) . " seconds";
    print "<br />\nCOMPARE === (FIRST TRY): " . number_format($time_three_a, 3) . " seconds";
    print "<br />\nCOMPARE === (SECOND TRY): " . number_format($time_three_b, 3) . " seconds";
?>

नोट: तुलना केवल तभी मान्य है जब प्रत्येक "FIRST TRY" अपने "सेकंड ट्राइ" के बहुत करीब हो। यदि वे महत्वपूर्ण रूप से भिन्न हैं, तो इसका मतलब है कि प्रोसेसर तुलना करते समय कुछ और करने में व्यस्त था और इसलिए परिणाम अविश्वसनीय हैं और बेंचमार्क फिर से चलाया जाना चाहिए।


9
इस तरह के माइक्रोबेन्चमार्क बहुत विश्वसनीय नहीं हैं। यह भी अत्यधिक संभावना नहीं है कि आप कभी भी अपनी प्रदर्शन समस्या के कारण के बारे में ==या उसके बारे में चिंता करना चाहते हैं ===। IMO: सख्त होना बेहतर है ( ===) जब तक आप स्पष्ट रूप से ढीले नहीं होना चाहते ( ==) अपनी तुलना के बारे में। अजीब धार के मामलों की संख्या अर्थात् "5 is not a number" == 5निराला कीड़े को जन्म दे सकती है। ===इस समस्या से कभी ग्रस्त नहीं होते।
5

मेरा परीक्षण प्रोग्रामर्स को बताना था कि यदि वे ===प्रदर्शन कारणों के लिए चुनते हैं , तो वे गलत हैं। इसलिए प्रोग्रामर तार्किक कारणों के आधार पर चुनने ===या ==आधारित होने के लिए स्वतंत्र हैं, लेकिन प्रदर्शन कारणों पर नहीं: एक या दूसरे को पसंद करने के लिए अलग-अलग मामले हैं और प्रदर्शन को बिल्कुल भी ध्यान में नहीं रखा जाना चाहिए।
लूकाफेरियो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.