3 farklı eşittir


149

Arasındaki fark nedir =, ==ve ===?

Bence eşittir işareti kullanmak bir değişkeni bildirmek, iki eşittir işareti ise bir karşılaştırma koşulu ve son olarak üç eşittir işareti bildirilen değişkenlerin değerlerini karşılaştırmak içindir.


örneği kontrol edin ... Daha fazla şey açıklığa kavuşturacağını ilan ettim ..
InfantPro'Aravind '14

1
İleri düzey PHP kullanıcıları için, == ve === arasındaki farkı bilmek ve kendilerine "her iki işlenenin de aynı türde olduğundan emin olduğumda == veya === ile karşılaştırmak daha mı hızlı?" aşağıdaki karşılaştırmalı senaryomda.
lucaferrario

@Strawberry Sorunun etiketinin javascript etiketini de içermesi gerektiğini hissediyorum, çünkü bu dil için de geçerli.
Funk Forty Niner

(Güncelleme): Javascript etiketini bir düzenlemeye ekledim, çünkü insanların =javascript'te kullandıkları birkaç soru var . Bu sadece PHP için değil diğer diller için de geçerlidir.
Funk Forty Niner

Burada tüm cevapları (çok zayıf olduğu son hariç) PHP hakkında sadece orada: devam ettim ve JavaScript etiketi silindi vardır (dil başa çıkabiliyor arasındaki farklar ve zaten de benzer facto kurallı JavaScript sorusu vardır eşittir Hangi operatörü (== vs ===) JavaScript karşılaştırmalarında kullanılmalı mı? ).
JJJ

Yanıtlar:


172

Sen var atama operatörü , 'eşit' karşılaştırma operatörü ve 'özdeş' karşılaştırma operatörü .======

$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)

==Ve ===ve her birini kullanma durumları hakkında daha fazla bilgi için dokümanlara bakın .


iki özdeş tarihi karşılaştırdığımda, yanlış sonuç aldım, neden? örnek: sandbox.onlinephpfunctions.com/code/…
stloc

3
@stloc, ===nesnelerle aynı içeriğe sahip olup olmadıklarını değil, aynı nesne olup olmadıklarını söyler.
Andrea

PHP4'te tanıtılan, Y2018 ;-) komik
mvorisek

22
  • = atama operatörü
  • == karşılaştırma işlecidir (iki değişkenin eşit değerlere sahip olup olmadığını kontrol eder)
  • === aynı karşılaştırma operatörüdür (iki değişkenin eşit değerlere sahip olup olmadığını ve aynı türde olup olmadığını kontrol eder).

8

= atama operatörü

== iki değişkenin aynı değere sahip olup olmadığını kontrol eder

=== İki değişkenin aynı değere sahip olup olmadığını VE türlerinin aynı olup olmadığını kontrol eder


1
Ayrıca iki karşılaştırma operatörünün! = Ve! == 'not' sürümlerini de öğrenin. Bazı diller: = bu tür karışıklıklardan kaçınmak için ödev olarak kullanırlar.
Phil Perry

3

= İşleci, değeri $ six = 6 değişkenine atar; 6 değeri, altı dolarlık değişkene atanır

== operatör her iki değişkenin değerinin eşit olup olmadığını kontrol eder ve çoğunlukla if ifadeleri gibi koşullarda kullanılır

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

=== == benzeri işleç (değerin eşit olup olmadığını kontrol edin) ve aynı veri türünün her ikisinin de olup olmadığını kontrol edin

$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';
}

// burada $ a, int türünde, $ b ise dize türünde. İşte çıktı


0

Gelişmiş PHP kullanıcıları için, ==ve arasındaki farkı bilmek ===ve kendilerine sormak " her iki işlenen aynı tip olduğundan emin olduğum zaman ==veya ile karşılaştırmak daha mı hızlı ===?"

Kısa ve genel cevap şu şekildedir: Bu durumlarda kullanımda herhangi bir performans kazancı yoktur ===, bu yüzden muhtemelen kullanmalısınız ==.

Kendilerini kıyaslamak isteyenler için, ad-hoc yazdığım aşağıdaki kodu kullanabilir ve farklı değerler deneyebilirsiniz. $a ve $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";
?>

NOT: Karşılaştırma yalnızca her "İLK TL", "İKİNCİ TL" ye çok yakın olduğunda geçerlidir. Önemli ölçüde farklılarsa, işlemcinin karşılaştırmaları yürütürken başka bir şey yapmakla meşgul olduğu ve sonuçların güvenilir olmadığı ve karşılaştırmanın tekrar çalıştırılması gerektiği anlamına gelir.


9
Bunun gibi mikrobenç işaretler çok güvenilir değildir. Performans probleminizin nedeni ==ya ===da nedeni olarak endişe etmek istemeniz de pek olası değildir . IMO: Karşılaştırmalarınız hakkında ===açıkça gevşek olmak istemediğiniz sürece katı ( ) olmak daha iyidir ==. Tuhaf kenar vakalarının sayısı, yani "5 is not a number" == 5tuhaf hatalara yol açabilir. ===asla bu problemden muzdarip değildir.
gnarf

Testim, programcılara ===performans nedenleriyle seçim yaparlarsa yanıldıklarını söylemekti. Bu nedenle, programcılar mantıklı nedenlere göre seçim yapabilirler ===veya ==mantıklı nedenlere dayanırlar ancak performans nedenlerine göre değiller: birini veya diğerini tercih etmek için farklı durumlar vardır ve performans hiç dikkate alınmamalıdır.
lucaferrario
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.