empty($var) mengembalikan true kalau variabelnya tidak ada atau nilainya falsy: null, false, 0, 0.0, "", "0", atau array kosong []. Untuk nilai lainnya, hasilnya false. Seperti isset(), fungsi ini tidak pernah memunculkan warning untuk variabel atau key array yang belum didefinisikan.
empty($x) sama dengan !isset($x) || !$x. Dengan kata lain: tidak ada, atau dikonversi menjadi false.
Nilai yang dianggap kosong
Pilih sebuah nilai di tabel untuk melihat empty() di samping isset() dan cast (bool). Setiap sel dihitung oleh PHP 8.3.
| $x | empty | isset | bool |
|---|---|---|---|
| null | |||
| false | |||
| 0 | |||
| 0.0 | |||
| "" | |||
| "0" | |||
| [] | |||
| " " | |||
| "0.0" | |||
| "a" | |||
| "null" | |||
| [0] | |||
| 1 | |||
| -1 |
Kejutannya ada di kedua ujung: "0" dianggap kosong, sedangkan " " (sebuah spasi), "0.0", "null", dan [0] tidak.
"0" dianggap kosong: bug klasik
Karena "0" bernilai falsy, empty() menganggap jumlah barang 0, skor 0, atau PIN "0" sebagai "belum diisi". Ini sering menjebak di formulir, karena setiap nilai datang sebagai string.
Untuk input teks, cara yang bisa diandalkan untuk memeriksa "belum diisi" adalah trim($value) === "". Simpan empty() untuk nilai yang 0-nya memang berarti tidak ada apa-apa.
Memeriksa apakah string kosong
Untuk menguji string kosong secara persis, bandingkan dengan "". Untuk juga menganggap spasi sebagai kosong, lakukan trim dulu. Sejak PHP 5.5, empty() menerima ekspresi, jadi empty(trim($s)) juga bisa (tetapi punya masalah "0" yang sama).
trim() tidak menerima null tanpa deprecation notice di PHP 8.1 ke atas, karena itulah blok ini menulis trim($s ?? "").
Memeriksa apakah array kosong
Untuk array, empty($arr), $arr === [], dan count($arr) === 0 semuanya memberi jawaban yang sama. Kelebihan empty() adalah ia tetap bekerja pada variabel atau key yang mungkin tidak ada.
array_filter() tanpa callback membuang setiap nilai falsy, jadi ini cara cepat untuk bertanya "apakah array ini berisi sesuatu yang nyata".
Memvalidasi field formulir yang wajib diisi
!empty() adalah cara umum untuk mewajibkan sebuah field, selama 0 bukan jawaban yang sah. Jalankan blok ini, biarkan field-nya kosong lalu tekan Send, kemudian isi dan kirim lagi: script berjalan sekali lagi dengan $_POST yang sudah terisi.
empty($_POST["terms"]) menangani kedua kasus untuk checkbox: tidak dikirim sama sekali, atau dikirim dengan nilai kosong. Halaman formulir membahas lebih jauh, termasuk pesan error per field.
empty vs isset
Keduanya aman untuk variabel dan key yang belum didefinisikan. Keduanya menjawab pertanyaan yang berbeda:
isset($x): apakah ia ada dan bukannull? Pakai untuk key opsional, checkbox, dan "apakah ini dikirim sama sekali".!empty($x): apakah ia ada dan bernilai truthy? Pakai untuk "berisi sesuatu yang nyata", saat0dan"0"tidak dihitung.$x === ""atau$x === []: apakah ia benar-benar kosong? Pakai saat0adalah nilai yang sah.
Halaman isset membahas sisi lainnya, termasuk isset() dengan beberapa variabel sekaligus dan bedanya dengan array_key_exists().
Pertanyaan yang sering diajukan
Nilai apa saja yang dianggap kosong oleh empty() di PHP?
empty($x) bernilai true saat $x tidak ada atau bernilai null, false, 0, 0.0, "", "0", atau []. Selain itu tidak kosong, termasuk " " (sebuah spasi), "0.0", "false", dan [0].
Kenapa "0" dianggap kosong di PHP?
empty() sama dengan !$x tanpa warning untuk variabel yang belum didefinisikan, dan string "0" dikonversi menjadi false. Karena itu empty() keliru untuk field yang menerima 0 sebagai jawaban yang sah; periksa dengan $x === '' atau trim($x) === '' sebagai gantinya.
Bagaimana cara mengecek apakah array kosong di PHP?
empty($arr) dan $arr === [] sama-sama bisa, begitu pula count($arr) === 0. empty() juga mengembalikan true saat variabelnya belum di-set, sedangkan count() pada variabel yang belum didefinisikan akan memunculkan warning lalu melempar TypeError untuk null.
Kapan sebaiknya memakai empty() alih-alih isset()?
Pakai isset() saat kamu hanya perlu tahu bahwa sebuah nilai ada (checkbox dikirim, key konfigurasi tersedia). Pakai !empty() saat nilainya juga tidak boleh kosong, misalnya field teks yang wajib diisi. Hati-hati dengan field yang menerima 0 sebagai nilai sah, karena empty('0') bernilai true.