empty($var), değişken yoksa ya da değeri falsy ise true döndürür: null, false, 0, 0.0, "", "0" veya boş bir dizi []. Diğer her değer için false döndürür. isset() gibi, tanımsız değişkenler veya dizi anahtarları için asla uyarı vermez.
empty($x), !isset($x) || !$x ile aynıdır. Başka bir deyişle: eksik, ya da false değerine dönüşüyor.
Hangi değerler boştur
empty() sonucunu isset() ve (bool) dönüştürmesinin yanında görmek için tabloda bir değer seçin. Her hücre PHP 8.3 ile hesaplandı.
| $x | empty | isset | bool |
|---|---|---|---|
| null | |||
| false | |||
| 0 | |||
| 0.0 | |||
| "" | |||
| "0" | |||
| [] | |||
| " " | |||
| "0.0" | |||
| "a" | |||
| "null" | |||
| [0] | |||
| 1 | |||
| -1 |
Sürprizler iki uçtadır: "0" boştur, " " (bir boşluk), "0.0", "null" ve [0] ise boş değildir.
"0" boştur: klasik hata
"0" falsy olduğu için empty(), 0 olan bir miktarı, 0 olan bir puanı ya da "0" olan bir PIN'i "hiçbir şey girilmedi" olarak değerlendirir. Bu, her değerin string olarak geldiği formlarda can yakar.
Metin girdisi için "hiçbir şey girilmedi" durumunun güvenilir kontrolü trim($value) === "" ifadesidir. empty() fonksiyonunu 0 değerinin gerçekten hiçbir şey anlamına geldiği değerler için kullanın.
Bir stringin boş olup olmadığını kontrol etmek
Boş bir stringi tam olarak test etmek için "" ile karşılaştırın. Boşlukları da boş saymak için önce trim uygulayın. PHP 5.5'ten beri empty() ifadeleri kabul eder, bu yüzden empty(trim($s)) de çalışır (ama aynı "0" sorununa sahiptir).
PHP 8.1 ve sonrasında trim(), kullanımdan kaldırma bildirimi vermeden null kabul etmez; bloğun trim($s ?? "") yazmasının nedeni budur.
Bir dizinin boş olup olmadığını kontrol etmek
Dizilerde empty($arr), $arr === [] ve count($arr) === 0 hepsi aynı yanıtı verir. empty() fonksiyonunun avantajı, var olmayabilecek bir değişken veya anahtar üzerinde de çalışmasıdır.
Callback olmadan array_filter() her falsy değeri kaldırır; bu yüzden "bu dizi gerçek bir şey içeriyor mu" diye sormanın hızlı bir yoludur.
Zorunlu bir form alanını doğrulamak
!empty(), 0 geçerli bir yanıt olmadığı sürece bir alanı zorunlu kılmanın yaygın bir yoludur. Bu bloğu çalıştırın, alanları boş bırakıp Send'e basın, sonra doldurup tekrar gönderin: betik $_POST dolu olarak bir kez daha çalışır.
empty($_POST["terms"]) onay kutusu için iki durumu da kapsar: hiç gönderilmemiş ya da boş bir değerle gönderilmiş. Formlar sayfası alan başına hata mesajlarıyla daha ileri gider.
empty ile isset
İkisi de tanımsız değişkenler ve anahtarlar üzerinde güvenlidir. Farklı sorulara yanıt verirler:
isset($x): var mı venulldeğil mi? İsteğe bağlı anahtarlar, onay kutuları ve "bu hiç gönderildi mi" için kullanın.!empty($x): var mı ve truthy mi?0ve"0"sayılmadığında "gerçek bir şey var mı" için kullanın.$x === ""veya$x === []: tam olarak boş mu?0geçerli bir değer olduğunda kullanın.
isset sayfası diğer yarıyı anlatır: aynı anda birkaç değişkenle isset() ve array_key_exists() ile farkı dahil.
Sıkça Sorulan Sorular
PHP'de empty() hangi değerleri boş sayar?
empty($x), $x yoksa ya da null, false, 0, 0.0, "", "0" veya [] ise true olur. " " (bir boşluk), "0.0", "false" ve [0] dahil geri kalan her şey boş değildir.
PHP'de "0" neden boş sayılır?
empty(), tanımsız değişkenler için uyarı vermeyen bir !$x ile aynıdır ve "0" stringi false değerine dönüşür. Bu, 0 değerinin geçerli bir yanıt olduğu alanlar için empty() fonksiyonunu yanlış bir seçim yapar; bunun yerine $x === '' veya trim($x) === '' kontrol edin.
PHP'de bir dizinin boş olup olmadığını nasıl kontrol ederim?
empty($arr) ve $arr === [] ikisi de çalışır, count($arr) === 0 da öyle. empty() değişken atanmamışken de true döndürür; tanımsız bir değişken üzerinde count() ise uyarı verir ve sonra null için bir TypeError fırlatır.
Ne zaman isset() yerine empty() kullanmalıyım?
Yalnızca bir değerin var olduğunu bilmeniz gerektiğinde (bir onay kutusu gönderildi, bir yapılandırma anahtarı mevcut) isset() kullanın. Değerin ayrıca boş olmaması gerektiğinde, örneğin zorunlu bir metin alanında, !empty() kullanın. 0 değerinin geçerli olduğu alanlarda dikkatli olun, çünkü empty('0') true olur.