Karşılaştırma operatörleri PHP eşitlik (== çift eşittir) ve kimlik (=== üçlü eşittir) Nasıl farklı?

6 Cevap php

Bazı yararlı örnekler vererek, == ve === arasındaki farkı açıklayabilir misiniz?

6 Cevap

== compares the values of variables for equality, type casting as necessary. === checks if the two variables are of the same type AND have the same value.

Farklılıkların tam bir açıklama PHP manual mevcuttur.

İşte bazı değişkenlerin birbirleriyle karşılaştırmak nasıl gösteren araya bir masa.

// "===" means that they are identical  
// "==" means that they are equal  
// "!=" means that they aren't equal.

         false   null    array()  0      "0"     0x0     "0x0"   "000"    "0000"
false    ===     ==      ==       ==      ==     ==      !=      !=       !=    
null     ==      ===     ==       ==      !=     ==      !=      !=       !=    
array()  ==      ==      ===      !=      !=     !=      !=      !=       !=    
0        ==      ==      !=       ===     ==     ===     ==      ==       ==    
"0"      ==      !=      !=       ==      ===    ==      ==      ==       ==    
0x0      ==      ==      !=       ===     ==     ===     ==      ==       ==    
"0x0"    !=      !=      !=       ==      ==     ==      ===     ==       ==    
"000"    !=      !=      !=       ==      ==     ==      ==      ===      ==    
"0000"   !=      !=      !=       ==      ==     ==      ==      ==       ===   

JavaScript ile ilgili olarak

=== Operatörü == operatörü olarak aynı çalışır ama onun işlenen aynı değeri, aynı zamanda aynı veri türü değil, sadece olmasını gerektirir.

Örneğin, aşağıdaki örnek 'x ve y eşittir' değil, 'x ve y aynı olan' gösterecektir

var x = 4;
var y = '4';
if (x == y) {
    alert('x and y are equal');
}
if (x === y) {
    alert('x and y are identical');
}

Bu veri türleri hakkında herşey. Örneğin bir BOOL (doğru veya yanlış) atın:

true also equals 1 and false also equals 0

the == does not care about the data types when comparing: so if you had a var that is 1 (which could also be true):

$var=1;

ve ardından == ile karşılaştırmak:

if ( $var == true )
{
echo"var is true";
}

Ama $var yok aslında eşit değil true, bunu yapar? Bu da, gerçek eşit olduğu, bunun yerine 1 en int değerine sahiptir.

=== ile, veri türleri emin iki vars / nesne / ne olursa olsun aynı tip kullanarak yapmak için kontrol edilir.

Yani ben yaptım eğer:

if ( $var === true )
{
echo"var is true";
}

Bu koşul, doğru olmaz gibi $var!==true sadece == true (ne demek istediğimi biliyorum).

Neden bu gerekir?

Basit - en PHP'nin işlevlerinden biri de bir göz atalım: array_search():

array_search() işlevi sadece bir dizideki bir değeri arar ve değer dizide bulunamadı Eğer değer içeri bulundu elemanın anahtarını döndürür, döndürür {[(1)] }. Ama, ne first element of the array (bir dizi anahtarına sahip olacak olan 0) saklanan bir değer, bir array_search() olsaydı .... array_search() function false eşit olduğu ... 0 dönecekti ..

Yani görseydiniz:

$arr=array("name");
if (array_search("name",$arr)==false)
{
//this would return 0 (the key of the element the val was found in) but because we're using ==, we'll think the function actually returned false...when it didn't.
}

Yani, şimdi bu bir sorun olabilir nasıl görüyorsunuz?

Bir fonksiyon false döndürürse kontrol ederken Çoğu kişi == false kullanmayın. Bunun yerine, ! kullanın. Ama aslında, bu ==false ile tam olarak aynı, yani görseydiniz:

$arr=array("name");
if (!array_search("name",$arr))//this is the same as doing (array_search("name",$arr)==false)

Veri türü kontrol edilir, böylece böylece gibi şeyler için, onun yerine === kullanmak istiyorsunuz.

x = 5 Verilen

1) Operator : == is "equal to". x == 8 is false
2) Operator : === is "exactly equal to" (value and type) x === 5 is true, x === "5" is false

Bir fonksiyon veya değişken yerine sadece yanlış (sıfır veya boş dize) denk daha sahte olup olmadığını sınamak için === kullanabilirsiniz.

$needle = 'a';
$haystack = 'abc';
$pos = strpos($haystack, $needle);
if ($pos === false) {
    echo $needle . ' was not found in ' . $haystack;
} else {
    echo $needle . ' was found in ' . $haystack . ' at location ' . $pos;
}

Bu durumda strpos testinde yanlış denk hangi 0 dönecekti

if ($pos == false)

veya

if (!$pos)

hangi burada istediğinizi değil.

Değişkenler bir türü ve bir değere sahip.

  • $ Var = "test", "test" içeren bir dizedir
  • = 24 $ var2'ye bir tamsayı vhose değer 24 dir.

When you use these variables (in PHP), sometimes you don't have the good type. For example, if you do

if ($var == 1) {... do something ...}

PHP ("cast") tamsayı $ var dönüştürmek zorunda. Herhangi bir boş olmayan bir dize 1 döküm çünkü bu durumda, "$ var == 1" doğrudur.

=== Kullanırken, değer VE TİPİ eşit olup olmadığını kontrol edin, bu yüzden "$ var === 1" yanlıştır.

Bu yararlıdır, örneğin, bir (hata) yanlış dönebilirsiniz fonksiyonunu ve 0 (sonuç) olduğunda:

if(myFunction() == false) { ... error on myFunction ... }

myFunction(), 0 döndürür false döküm ve bir hata var gibi sanki bu kod yanlış. Doğru kodu:

if(myFunction() === false) { ... error on myFunction ... }

Test dönüş değeri "boolean ve yanlış olduğunu" ve "false döküm olabilir" değil çünkü.