Metin2Games Discord sunucusuna katılmak ve anlık destek almak için tıkla!
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

photo-1517694712202-14dd9538aa97

📌 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 matters

Karşı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ö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 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 == $btruefalse10-1"1""0"""null[]"php""10""1e1"
truetruefalsetruefalsetruetruefalsefalsefalsefalsetruetruetrue
falsefalsetruefalsetruefalsefalsetruetruetruetruefalsefalsefalse
1truefalsetruefalsefalsetruefalsefalsefalsefalsefalsefalsefalse
0falsetruefalsetruefalsefalsetruefalsetruefalsefalsefalsefalse
-1truefalsefalsefalsetruefalsefalsefalsefalsefalsefalsefalsefalse
"1"truefalsetruefalsefalsetruefalsefalsefalsefalsefalsefalsefalse
"0"falsetruefalsetruefalsefalsetruefalsefalsefalsefalsefalsefalse
""falsetruefalsefalsefalsefalsefalsetruetruefalsefalsefalsefalse
nullfalsetruefalsetruefalsefalsefalsetruetruetruefalsefalsefalse
[]falsetruefalsefalsefalsefalsefalsefalsetruetruefalsefalsefalse
"php"truefalsefalsefalsefalsefalsefalsefalsefalsefalsetruefalsefalse
"10"truefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruetrue
"1e1"truefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsetruetrue

== 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 < true

Son 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 order

Spaceship (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.
 
Community platform by XenForo® © 2010-2026 XenForo Ltd.
© 2020-2026 Metin2Games - Tüm Hakları Saklıdır.
Geri
Üst