Menu

PHP Karşılaştırma Operatörleri: == ile === ve <=>

PHP değerleri == (tür dönüşümünden sonra eşit), === (eşit değer ve aynı tür), != ve !==, < > <= >= ve spaceship operatörü <=> ile karşılaştırır. == operatörünün türleri ne zaman dönüştürdüğünü, PHP 8'de neyin değiştiğini öğrenin ve tüm gevşek ve katı karşılaştırmaları tek tabloda görün.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

==, 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örAdNe zaman true
$a == $bEşittür dönüşümünden sonra eşitse
$a === $bÖzdeşeşit ve aynı türdeyse
$a != $b, $a <> $bEşit değiltür dönüşümünden sonra eşit değilse
$a !== $bÖzdeş değileşit değilse ya da türleri farklıysa
$a < $b, $a > $bKüçüktür, büyüktür
$a <= $b, $a >= $bKüçük eşit, büyük eşit
$a <=> $bSpaceship-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.

Gevşek (==) ve katı (===) karşılaştırma
Point at or tap a cell to read it as PHP.
$a == $btruefalse10-1"1""0"""null[]"php""10""1e1"
true
false
1
0
-1
"1"
"0"
""
null
[]
"php"
"10"
"1e1"
Every cell computed by PHP 8.3.19.

== farklı türleri nasıl karşılaştırır

PHP 8'in izlediği kurallar, pratikte önem sırasına göre:

  1. İki sayısal string sayı olarak karşılaştırılır: "10" == "1e1" ve "1" == "01" ikisi de true olur.
  2. Bir sayı ve sayısal bir string: string sayıya dönüşür. 100 == "1e2" true olur.
  3. 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" false olur (PHP 7'de true idi).
  4. Herhangi bir şey ve bir bool: iki taraf da bool'a çevrilir. "a" == true ve [] == false true olur.
  5. null ve bir string: null, "" olur; bu yüzden null == "" true ama null == "0" false olur. Diğer her türe karşı null, false olarak karşılaştırılır.
  6. İ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.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA