- Moderatör
- #1
- Kayıtlı
- 1 Yıl 9 Ay 26 Gün
- Katılım
- 10 Ocak 2025
- Konular
- 163
- Mesajlar
- 257
- Tepkime puanı
- 36
- Online süresi
- 11h 19m
- Puan
- 53
- Konum
- Türkiye
- Web sitesi
- www.zyncra.shop
PHP'de Karşılaştırma Operatörleri: ==, === ve <=> Arasındaki Farklar
Karşılaştırma işlemlerinde sıkça karşılaşılan hataların çoğu,
PHP Karşılaştırma Operatörlerinin Tam Listesi
Gevşek ve Katı Karşılaştırma Tablosu
Bu tablodaki veriler PHP 8.3 sürümüne göre hazırlanmıştır.
Gevşek (==) ve Katı (===) Karşılaştırma Arasındaki Fark
== Operatörü Farklı Veri Tiplerini Nasıl Karşılaştırır?
PHP 8'de uygulanan kurallar, önem sırasına göre şu şekildedir:
1. İki sayısal string karşılaştırıldığında, her ikisi de sayıya dönüştürülür:
2. Bir sayı ile sayısal bir string karşılaştırıldığında, string sayıya çevrilir:
3. Bir sayı ile sayısal olmayan bir string karşılaştırıldığında (PHP 8'den itibaren), sayı stringe dönüştürülür ve karşılaştırma string üzerinden yapılır:
4. Herhangi bir değer ile bir bool karşılaştırıldığında, iki taraf da bool tipine dönüştürülür:
5. Bir string ile
6. İki dizi, eğer aynı anahtar ve değer çiftlerine sahipse birbirine eşit kabul edilir.
Son satırda görüldüğü üzere,
Eşit Değil Operatörleri: != ve !==
String Karşılaştırmaları
Spaceship (Uzay Gemisi) Operatörü <=>
İki dizinin
Sık Yapılan Hata: Float Değerleri == ile Karşılaştırmak
Float değerler bilgisayar sistemlerinde ikili (binary) formatta saklandığı için birçok ondalık sayı sadece yaklaşık değerlerle temsil edilir. Bu sebeple
Finansal hesaplamalar ve para birimleri için kuruşları tam sayı (integer) olarak saklamanız ve karşılaştırmaları
Sıkça Sorulan Sorular (SSS)
Konu İçeriği — Hızlı Bakış (
Yazılım / Kod • ⏱ ~7 dk okuma •
Kod: PHP)
01. PHP Karşılaştırma Operatörlerinin Tam Listesi
02. Gevşek ve Katı Karşılaştırma Tablosu
03. Gevşek (==) ve Katı (===) Karşılaştırma Arasındaki Fark
04. == Operatörü Farklı Veri Tiplerini Nasıl Karşılaştırır?
05. Eşit Değil Operatörleri: != ve !==
06. String Karşılaştırmaları
== operatörü, PHP'nin iki değeri ortak bir veri tipine dönüştürerek eşit olup olmadıklarını kontrol etmesini sağlar. === operatörü ise hem değerlerin hem de veri tiplerinin tamamen aynı olmasını şart koşar. Bu nedenle 1 == "1" ifadesi true sonucunu verirken, 1 === "1" ifadesi false sonucunu döndürür.PHP:
<?php
var_dump(1 == "1"); // same value after conversion
var_dump(1 === "1"); // int vs string
var_dump(0 == false);
var_dump(0 === false);
var_dump(null == false);
var_dump("abc" == "ABC"); // case mattersKarşılaştırma işlemlerinde sıkça karşılaşılan hataların çoğu,
== operatörünün beklenmedik tip dönüşümleri yapmasından kaynaklanır. Bu yüzden, genel bir alışkanlık olarak === ve !== kullanmanız; yalnızca tip dönüşümünün gerçekleşmesini istediğiniz durumlarda == operatörüne başvurmanız önerilir.PHP Karşılaştırma Operatörlerinin Tam Listesi
| 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 tablodaki veriler PHP 8.3 sürümüne göre hazırlanmıştır.
== ile === arasındaki farkı görmek için ilgili hücreleri inceleyebilirsiniz. == tablosunda özellikle null, "", "0" ve [] satırlarında şaşırtıcı sonuçlar ortaya çıkabilirken, === tablosu sadece değerlerin birebir aynı olduğu köşegen hattında sonuç verir.Gevşek (==) ve Katı (===) Karşılaştırma Arasındaki Fark
| $a == $b | true | false | 1 | 0 | -1 | "1" | "0" | "" | null | [] | "php" | "10" | "1e1" |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| true | true | false | true | false | true | true | false | false | false | false | true | true | true |
| false | false | true | false | true | false | false | true | true | true | true | false | false | false |
| 1 | true | false | true | false | false | true | false | false | false | false | false | false | false |
| 0 | false | true | false | true | false | false | true | false | true | false | false | false | false |
| -1 | true | false | false | false | true | false | false | false | false | false | false | false | false |
| "1" | true | false | true | false | false | true | false | false | false | false | false | false | false |
| "0" | false | true | false | true | false | false | true | false | false | false | false | false | false |
| "" | false | true | false | false | false | false | false | true | true | false | false | false | false |
| null | false | true | false | true | false | false | false | true | true | true | false | false | false |
| [] | false | true | false | false | false | false | false | false | true | true | false | false | false |
| "php" | true | false | false | false | false | false | false | false | false | false | true | false | false |
| "10" | true | false | false | false | false | false | false | false | false | false | false | true | true |
| "1e1" | true | false | false | false | false | false | false | false | false | false | false | true | true |
== Operatörü Farklı Veri Tiplerini Nasıl Karşılaştırır?
PHP 8'de uygulanan kurallar, önem sırasına göre şu şekildedir:
1. İki sayısal string karşılaştırıldığında, her ikisi de sayıya dönüştürülür:
"10" == "1e1" ve "1" == "01" ifadeleri true sonucunu verir.2. Bir sayı ile sayısal bir string karşılaştırıldığında, string sayıya çevrilir:
100 == "1e2" ifadesi true döner.3. Bir sayı ile sayısal olmayan bir string karşılaştırıldığında (PHP 8'den itibaren), sayı stringe dönüştürülür ve karşılaştırma string üzerinden yapılır:
0 == "a" sonucu false olur (PHP 7'de bu işlem true dönüyordu).4. Herhangi bir değer ile bir bool karşılaştırıldığında, iki taraf da bool tipine dönüştürülür:
"a" == true ve [] == false ifadeleri true sonucunu verir.5. Bir string ile
null karşılaştırıldığında, null boş stringe ("") dönüştürülür; bu nedenle null == "" true olurken, null == "0" false olur. Diğer tüm veri tipleriyle karşılaştırıldığında null, false olarak değerlendirilir.6. İki dizi, eğer aynı anahtar ve değer çiftlerine sahipse birbirine eşit kabul edilir.
PHP:
<?php
var_dump("10" == "1e1"); // both numeric strings
var_dump("1" == "01");
var_dump(100 == "1e2");
var_dump(0 == "a"); // false since PHP 8
var_dump("1" == " 1"); // whitespace around a number is allowed
var_dump([] == false); // empty array is falsy
var_dump(null == "0"); // null becomes "", and "" is not "0"
var_dump(null < -1); // null and -1 become false < trueSon satırda görüldüğü üzere,
null içeren sıralama karşılaştırmaları pek anlamlı değildir; çünkü null değeri false'a, -1 ise true'a dönüştürülür ve false < true kuralı işletilir.Eşit Değil Operatörleri: != ve !==
!= ile <> operatörleri aynı işlevi görür. !== ise bu işlemin katı (strict) versiyonudur. Bu ayrım, özellikle strpos gibi hem 0 hem de false döndürebilen fonksiyonlarda kritik önem taşır:PHP:
<?php
$text = "php is fun";
$pos = strpos($text, "php"); // found at position 0
if ($pos != false) {
echo "!= says found\n";
} else {
echo "!= says NOT found (wrong)\n";
}
if ($pos !== false) {
echo "!== says found at $pos\n";
}0 != false ifadesi false sonucunu verir çünkü 0 değeri false'a dönüştürülür. Ancak 0 !== false ifadesi true döner, çünkü bir tam sayı (int) bir boolean değildir. Benzer bir durum array_search fonksiyonunda ve katı kontrol bayrağı kullanılmayan in_array fonksiyonunda da geçerlidir.String Karşılaştırmaları
< ve > operatörleri, stringleri bayt bayt (standart ASCII için alfabetik sırada) kıyaslar. Eğer her iki string de sayısal değer içeriyorsa, karşılaştırma sayısal olarak yapılır. Büyük/küçük harf duyarlılığı olmayan veya "doğal" bir sıralama gerekiyorsa özel fonksiyonlar kullanılmalıdır:PHP:
<?php
var_dump("apple" < "banana");
var_dump("10" < "9"); // both numeric: 10 < 9
var_dump("10" < "9a"); // not both numeric: compared as text
var_dump(strcmp("a", "b")); // < 0
var_dump(strcasecmp("HELLO", "hello")); // 0 means equal
var_dump(strnatcmp("img12", "img10")); // natural orderSpaceship (Uzay Gemisi) Operatörü <=>
$a <=> $b ifadesi; $a daha küçükse -1, iki değer eşitse 0, $a daha büyükse 1 değerini döndürür. Bu operatör, < ve == ile aynı kuralları benimser ve özellikle sıralama callback fonksiyonları yazarken büyük kolaylık sağlar.PHP:
<?php
var_dump(1 <=> 2, 2 <=> 2, 3 <=> 2);
var_dump("a" <=> "b");
var_dump([1, 2] <=> [1, 3]);
$people = [
["name" => "Ada", "age" => 36],
["name" => "Linus", "age" => 28],
["name" => "Grace", "age" => 85],
];
// sort by age, then by name
usort($people, fn($a, $b) => [$a["age"], $a["name"]] <=> [$b["age"], $b["name"]]);
echo implode(", ", array_column($people, "name")), "\n";İki dizinin
<=> ile karşılaştırılması, elemanların tek tek kıyaslanması anlamına gelir. Örneğin, bir callback fonksiyonu önce yaşa, ardından isme göre sıralama yapacaksa bu yöntem kullanılır.Sık Yapılan Hata: Float Değerleri == ile Karşılaştırmak
Float değerler bilgisayar sistemlerinde ikili (binary) formatta saklandığı için birçok ondalık sayı sadece yaklaşık değerlerle temsil edilir. Bu sebeple
0.1 + 0.2 işleminin sonucu tam olarak 0.3 etmez ve == operatörü bu küçük farkı tespit eder.PHP:
<?php
$sum = 0.1 + 0.2;
var_dump($sum == 0.3);
var_dump($sum);
// Compare with a tolerance
var_dump(abs($sum - 0.3) < PHP_FLOAT_EPSILON);
// Or round to the precision you need, e.g. money in cents
var_dump(round($sum, 2) == round(0.3, 2));Finansal hesaplamalar ve para birimleri için kuruşları tam sayı (integer) olarak saklamanız ve karşılaştırmaları
=== operatörü ile yapmanız daha güvenlidir.Sıkça Sorulan Sorular (SSS)
Soru 1: Paylaşılan PHP örneği canlı (production) ortamda kullanılabilir mi?
Evet. Konudaki kod bloğu bellek güvenliği, hata yakalama ve performans kriterleri gözetilerek hazırlanmıştır; kendi proje mimarinize uyarlayarak doğrudan kullanabilirsiniz.
Soru 2: PHP'de Karşılaştırma Operatörleri: ==, === ve <=> Arasındaki Farklar uygulamasında en sık yapılan hata nedir?
Girdi doğrulamasını (validation) ve zaman aşımı/kaynak sınırlarını varsayılan değerlerde bırakmaktır. Rehberdeki yapılandırma adımlarını eksiksiz uygulayarak olası darboğazları önleyebilirsiniz.
Evet. Konudaki kod bloğu bellek güvenliği, hata yakalama ve performans kriterleri gözetilerek hazırlanmıştır; kendi proje mimarinize uyarlayarak doğrudan kullanabilirsiniz.
Soru 2: PHP'de Karşılaştırma Operatörleri: ==, === ve <=> Arasındaki Farklar uygulamasında en sık yapılan hata nedir?
Girdi doğrulamasını (validation) ve zaman aşımı/kaynak sınırlarını varsayılan değerlerde bırakmaktır. Rehberdeki yapılandırma adımlarını eksiksiz uygulayarak olası darboğazları önleyebilirsiniz.

