==, PHP iki değeri ortak bir türe dönüştürdükten sonra eşit olup olmadıklarını kontrol eder. === ise eşit ve aynı türde olduklarını kontrol eder. Bu yüzden 1 == "1" true, 1 === "1" ise false olur.
Karşılaştırma hatalarının çoğu, == operatörünün beklemediğiniz bir şeyi dönüştürmesinden kaynaklanır. İyi bir varsayılan === ve !== kullanmak, yalnızca dönüşüm istediğinizi bildiğinizde == operatörüne geçmektir.
Tüm PHP karşılaştırma operatörleri
| Operatör | Ad | Ne zaman true |
|---|---|---|
$a == $b | Eşit | tür dönüşümünden sonra eşitse |
$a === $b | Özdeş | eşit ve aynı türdeyse |
$a != $b, $a <> $b | Eşit değil | tür dönüşümünden sonra eşit değilse |
$a !== $b | Özdeş değil | eşit değilse ya da türleri farklıysa |
$a < $b, $a > $b | Küçüktür, büyüktür | |
$a <= $b, $a >= $b | Küçük eşit, büyük eşit | |
$a <=> $b | Spaceship | -1, 0 veya 1 döndürür |
Gevşek ve katı karşılaştırma tablosu
Bu tablonun her hücresi PHP 8.3 ile hesaplandı. == ile === arasında geçiş yapın ve ifadeyi görmek için bir hücreye dokunun. == tablosu null, "", "0" ve [] satırlarında sürprizlerle doludur; === tablosu ise yalnızca köşegenidir.
| $a == $b | true | false | 1 | 0 | -1 | "1" | "0" | "" | null | [] | "php" | "10" | "1e1" |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| true | |||||||||||||
| false | |||||||||||||
| 1 | |||||||||||||
| 0 | |||||||||||||
| -1 | |||||||||||||
| "1" | |||||||||||||
| "0" | |||||||||||||
| "" | |||||||||||||
| null | |||||||||||||
| [] | |||||||||||||
| "php" | |||||||||||||
| "10" | |||||||||||||
| "1e1" |
== farklı türleri nasıl karşılaştırır
PHP 8'in izlediği kurallar, pratikte önem sırasına göre:
- İki sayısal string sayı olarak karşılaştırılır:
"10" == "1e1"ve"1" == "01"ikisi detrueolur. - Bir sayı ve sayısal bir string: string sayıya dönüşür.
100 == "1e2"trueolur. - Bir sayı ve sayısal olmayan bir string: PHP 8'den beri sayı stringe dönüşür ve string olarak karşılaştırılırlar.
0 == "a"falseolur (PHP 7'detrueidi). - Herhangi bir şey ve bir bool: iki taraf da bool'a çevrilir.
"a" == trueve[] == falsetrueolur. - null ve bir string:
null,""olur; bu yüzdennull == ""trueamanull == "0"falseolur. Diğer her türe karşınull,falseolarak karşılaştırılır. - İki dizi: aynı anahtar/değer çiftlerine sahiplerse eşittir.
Son satır, null ile yapılan sıralama karşılaştırmalarının neden nadiren anlamlı olduğunu gösterir: null, false olur, -1, true olur ve false < true.
Eşit değil: != ile !==
!= ve <> aynı operatördür. !== katı sürümdür. Fark en çok strpos gibi 0 veya false döndüren fonksiyonlarda önemlidir:
0 != false false olur, çünkü 0, false değerine dönüşür. 0 !== false true olur, çünkü bir int bir bool değildir. Aynı tuzak array_search için ve katı bayrağı olmadan in_array için de geçerlidir.
Stringleri karşılaştırmak
< ve > stringleri bayt bayt karşılaştırır (düz ASCII için alfabetik olarak). İki string de sayısalsa sayı olarak karşılaştırılır. Büyük/küçük harfe duyarsız ya da "doğal" sıralama için fonksiyonları kullanın:
Spaceship operatörü <=>
$a <=> $b, $a küçükse -1, eşitlerse 0, $a büyükse 1 döndürür. < ve == ile aynı kuralları kullanır ve bir sıralama callback'i yazmanın en kısa yoludur.
İki diziyi <=> ile karşılaştırmak onları eleman eleman karşılaştırır; callback'in önce yaşa, sonra ada göre sıralaması bu şekilde olur. Daha fazla sıralama tarifi dizi sıralama sayfasında.
Sık yapılan hata: float'ları == ile karşılaştırmak
Float'lar ikili sistemde saklanır, bu yüzden birçok ondalık değer yaklaşık değerdir. 0.1 + 0.2 tam olarak 0.3 değildir ve == farkı görür.
Para için tam kuruşları tam sayı olarak saklayın ve onları === ile karşılaştırın.
Sıkça Sorulan Sorular
PHP'de == ile === arasındaki fark nedir?
== iki tarafı ortak bir türe dönüştürür ve sonra karşılaştırır, bu yüzden 1 == "1" true olur. === yalnızca değerler eşit ve aynı türde olduğunda true olur, bu yüzden 1 === "1" false olur. Dönüşüm istemiyorsanız === kullanın.
PHP'de 0 == "a" true mu?
PHP 8'den beri değil. Bir sayı sayısal olmayan bir stringle karşılaştırıldığında PHP 8 onları string olarak karşılaştırır, bu yüzden 0 == "a" false olur. PHP 7'de string 0 değerine çevriliyordu ve sonuç true idi.
PHP'de != ile !== arasındaki fark nedir?
!= (ve onun takma adı <>) == operatörünün tersidir: değerler tür dönüşümünden sonra eşitse false olur. !== ise === operatörünün tersidir: değerler veya türleri farklıysa true olur, bu yüzden 0 !== false true, 0 != false ise false olur.
PHP'de iki float nasıl karşılaştırılır?
Float aritmetiğinin sonuçlarında == kullanmayın: 0.1 + 0.2 == 0.3 false olur. Bunun yerine farkı küçük bir toleransla karşılaştırın: abs($a - $b) < PHP_FLOAT_EPSILON, ya da ikisini de önemsediğiniz hassasiyete yuvarlayın.