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ı
| $x | empty | isset | bool |
|---|---|---|---|
| null | true | false | false |
| false | true | true | false |
| 0 | true | true | false |
| 0.0 | true | true | false |
| "" | true | true | false |
| "0" | true | true | false |
| [] | true | true | false |
| " " | false | true | true |
| "0.0" | false | true | true |
| "a" | false | true | true |
| "null" | false | true | true |
| [0] | false | true | true |
| 1 | false | true | true |
| -1 | false | true | true |
Ş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
Paylaşım İçin Teşekkürler Eline Sağlık.
Paylaşım için teşekkürler yararlı içerik
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 0
- Görüntüleme
- 26
- Cevaplar
- 2
- Görüntüleme
- 55
- Cevaplar
- 16
- Görüntüleme
- 55
- Cevaplar
- 3
- Görüntüleme
- 23