mavzermete 1
mavzermete
kaptanmikro1 1
kaptanmikro1
Jack.Wrestler 1
Jack.Wrestler
TuZaKK 1
TuZaKK
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Agora Metin2 1
Agora Metin2
EnesDeniz™ 1
EnesDeniz™
Cancan.1234 1
Cancan.1234
lHezarfeNl 1
lHezarfeNl
Bodyguardd 1
Bodyguardd
kralhakan2009 1
kralhakan2009
Reklam vermek için turkmmo@gmail.com

Altın Konu PHP empty(): Boş String, Dizi ve 0 Değerlerinin Kontrolü

image.jpeg


empty($var) fonksiyonu, bir değişken tanımlı değilse veya değeri "falsy" (yanlış kabul edilen) bir değerse true sonucunu verir. Bu kapsama null, false, 0, 0.0, "", "0" ve boş diziler [] girer. Bunun dışındaki tüm değerler için false döner. Tıpkı isset() gibi, tanımlanmamış değişkenler veya dizi anahtarları için herhangi bir uyarı mesajı üretmez.

PHP:
<?php
$name = "";
$items = [];
$count = 0;
$city = "Paris";

var_dump(empty($name));
var_dump(empty($items));
var_dump(empty($count));
var_dump(empty($city));
var_dump(empty($notDefined));

if (empty($items)) {
    echo "Your cart is empty\n";
}

empty($x) kullanımı, mantıksal olarak !isset($x) || !$x ifadesiyle aynıdır. Yani değişken ya mevcut değildir ya da boolean karşılığı false değerindedir.

Hangi Değerler Boş Kabul Edilir?

empty() fonksiyonunun nasıl çalıştığını, isset() ve (bool) dönüşümleriyle kıyaslamak için tablodan bir değer seçebilirsiniz. Tablodaki tüm veriler PHP 8.3 sürümüne göre hesaplanmıştır.

$x'in Farklı Değerleri İçin empty, isset ve (bool) Karşılaştırması

$xemptyissetbool
nulltruefalsefalse
falsetruetruefalse
0truetruefalse
0.0truetruefalse
""truetruefalse
"0"truetruefalse
[]truetruefalse
" "falsetruetrue
"0.0"falsetruetrue
"a"falsetruetrue
"null"falsetruetrue
[0]falsetruetrue
1falsetruetrue
-1falsetruetrue

Şaşırtıcı noktalar uç örneklerde karşımıza çıkar: "0" değeri boş sayılırken; " " (tek bir boşluk), "0.0", "null" ve [0] değerleri boş kabul edilmez.

"0" Değerinin Boş Sayılması ve Yaygın Hatalar

"0" ifadesi falsy bir değer olduğu için empty() fonksiyonu; 0 olan bir miktarı, 0 puanı veya "0" olan bir PIN kodunu "hiçbir veri girilmemiş" şeklinde yorumlar. Özellikle tüm verilerin string olarak iletildiği formlarda bu durum ciddi sorunlara yol açabilir.

PHP:
<?php
$submitted = ["quantity" => "0", "comment" => "", "pin" => "0"];

foreach ($submitted as $field => $value) {
    $byEmpty = empty($value) ? "missing" : "ok";
    $byString = trim($value) === "" ? "missing" : "ok";
    printf("%-9s %-4s empty(): %-8s trim() === '': %s\n",
        $field, var_export($value, true), $byEmpty, $byString);
}

Bir metin girişinin gerçekten boş olup olmadığını belirlemenin en güvenilir yolu trim($value) === "" kontrolünü yapmaktır. empty() fonksiyonunu ise yalnızca 0 değerinin gerçekten "boşluk" veya "yokluk" anlamına geldiği durumlarda kullanın.

Bir String'in Boş Olup Olmadığını Denetlemek

Bir string'in tam olarak boş olup olmadığını test etmek için "" ile karşılaştırma yapın. Boşluk karakterlerini de boş saymak istiyorsanız, önce trim işlemini uygulayın. PHP 5.5 sürümünden beri empty() fonksiyonu ifadeleri desteklediği için empty(trim($s)) yazımı da çalışır (ancak bu yöntem de "0" değerinin boş sayılması sorununa sahiptir).

PHP:
<?php
$tests = ["", "   ", "0", "hello", null];

foreach ($tests as $s) {
    printf("%-8s === '': %-5s  trim === '': %-5s  empty(): %s\n",
        var_export($s, true),
        var_export($s === "", true),
        var_export(trim($s ?? "") === "", true),
        var_export(empty($s), true));
}

PHP 8.1 ve sonrası sürümlerde trim() fonksiyonuna null gönderildiğinde bir uyarı mesajı alınır. Bu yüzden kod örneğinde trim($s ?? "") yapısı tercih edilmiştir.

Bir Dizinin Boş Olup Olmadığını Denetlemek

Diziler için empty($arr), $arr === [] ve count($arr) === 0 kontrollerinin tamamı aynı sonucu üretir. empty() kullanmanın sağladığı avantaj, var olmayan bir değişken veya dizi anahtarı üzerinde işlem yaparken hata vermemesidir.

PHP:
<?php
$cart = [];
$tags = ["php"];
$order = ["lines" => []];

var_dump(empty($cart), $cart === [], count($cart) === 0);
var_dump(empty($tags));
var_dump(empty($order["lines"]));
var_dump(empty($order["discounts"]));   // key not there at all

// An array of empty values is not empty
var_dump(empty(["", null, 0]));

// To ignore blank entries, filter first
var_dump(empty(array_filter(["", null, 0])));

array_filter() fonksiyonu, bir callback verilmediğinde tüm falsy değerleri diziden çıkarır. Bu yöntem, "bu dizi içerisinde gerçek bir veri var mı" sorusuna yanıt aramanın pratik bir yoludur.

Zorunlu Form Alanlarının Doğrulanması

0 değerinin geçerli bir yanıt kabul edilmediği senaryolarda, bir alanı zorunlu kılmak için yaygın olarak !empty() kullanılır. Kodu çalıştırdığınızda, alanları boş bırakıp "Send" butonuna basarak ve ardından doldurup tekrar göndererek, betiğin $_POST verileriyle nasıl çalıştığını gözlemleyebilirsiniz.

PHP:
<?php
$errors = [];
$sent = ($_SERVER["REQUEST_METHOD"] ?? "GET") === "POST";

if ($sent) {
    if (empty($_POST["email"])) {
        $errors[] = "Email is required.";
    }
    if (empty($_POST["terms"])) {
        $errors[] = "Please accept the terms.";
    }
    // Age 0 is invalid anyway, but "" must be caught: here empty() fits
    if (empty($_POST["age"]) || !ctype_digit($_POST["age"])) {
        $errors[] = "Age must be a whole number.";
    }
}
?>
<form method="post">
  <p><label>Email <input name="email" value="<?= htmlspecialchars($_POST["email"] ?? "") ?>"></label></p>
  <p><label>Age <input name="age" value="<?= htmlspecialchars($_POST["age"] ?? "") ?>"></label></p>
  <p><label><input type="checkbox" name="terms" value="1" <?= empty($_POST["terms"]) ? "" : "checked" ?>> I accept the terms</label></p>
  <button>Send</button>
</form>
<?php if ($sent && !$errors): ?>
  <p style="color:#0a7">Thanks, all fields are valid.</p>
<?php endif; ?>
<?php foreach ($errors as $e): ?>
  <p style="color:#c33"><?= $e ?></p>
<?php endforeach; ?>

empty($_POST["terms"]) kullanımı, bir onay kutusu için hem verinin hiç gönderilmediği hem de boş bir değerle gönderildiği her iki durumu da kapsar.

empty() ve isset() Arasındaki Farklar

Her iki fonksiyon da tanımlanmamış değişkenler ve anahtarlar üzerinde güvenle kullanılabilir ancak farklı amaçlara hizmet ederler:

PHP:
<?php
$values = ["null" => null, "zero" => 0, "zero string" => "0", "empty string" => "", "space" => " ", "text" => "php"];

printf("%-13s %-7s %-7s %s\n", "", "isset", "empty", "!empty");
foreach ($values as $label => $v) {
    printf("%-13s %-7s %-7s %s\n", $label,
        var_export(isset($v), true),
        var_export(empty($v), true),
        var_export(!empty($v), true));
}

• isset($x): Değişken var mı ve null değil mi? İsteğe bağlı anahtarlar, onay kutuları ve "bu veri gönderildi mi" kontrolü için kullanılır.
• !empty($x): Değişken var mı ve değeri "truthy" mi? 0 ve "0" değerleri dışlandığında "içeride gerçek bir veri var mı" sorusu için kullanılır.
• $x === "" veya $x === []: Değer tam olarak boş mu? 0 değerinin geçerli olduğu durumlarda bu kesin karşılaştırmalar tercih edilmelidir.
 

En Çok Reaksiyon Alan Mesajlar

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst