isset($var) mengembalikan true jika variabelnya ada dan nilainya tidak null. Fungsi ini mengembalikan false untuk variabel yang tidak terdefinisi, yang sudah di-unset, atau yang berisi null, dan tidak pernah mencetak warning.
isset() hanya melihat apakah sesuatu itu ada. Nilai yang sudah diisi tetapi kosong, seperti 0, "", atau [], tetap mengembalikan true. Jika kamu ingin "sudah diisi dan tidak kosong", pakai empty (dibalik).
Cek apakah key array ada dengan isset
Di sinilah isset() paling sering dipakai. Membaca key yang tidak ada mencetak Warning: Undefined array key pada pengaturan PHP yang normal; memeriksanya dulu dengan isset() tidak memunculkan warning itu. Fungsi ini juga bekerja untuk key bersarang, dan berhenti diam-diam di level pertama yang tidak ada.
Saat kamu hanya butuh nilainya atau nilai default, $user["website"] ?? "none" melakukan pemeriksaan yang sama dalam satu langkah. Lihat operator null coalescing.
isset dengan beberapa variabel
Berikan beberapa argumen, maka isset() mengembalikan true hanya jika semuanya sudah diisi dan tidak bernilai null. Ini cara singkat untuk memeriksa bahwa setiap field wajib sudah dikirim.
isset pada string dan object
Pada string, isset($str[5]) memeriksa apakah ada karakter di offset 5, yang merupakan pemeriksaan panjang yang cepat. Pada object, fungsi ini memeriksa property; untuk class dengan data private, isset() memanggil method __isset() jika class itu mendefinisikannya.
isset vs empty vs is_null
Pilih sebuah nilai $x di tabel untuk membandingkan ketiga pemeriksaan dan cast (bool) biasa. Setiap sel dihitung oleh PHP 8.3.
| $x | isset | empty | is_null | bool |
|---|---|---|---|---|
| null | ||||
| false | ||||
| 0 | ||||
| "0" | ||||
| "" | ||||
| " " | ||||
| [] | ||||
| "a" | ||||
| 1 | ||||
| 0.0 | ||||
| "0.0" |
Pola yang perlu diingat:
isset()bernilaifalsehanya untuknulldan hal-hal yang tidak ada.empty()bernilaitrueuntuk hal-hal tersebut dan juga untuk setiap nilai falsy:false,0,0.0,"","0",[].is_null()memberi hasil kebalikan dariisset()untuk variabel yang ada, tetapi memberi warning saat variabelnya tidak terdefinisi. Pakaiisset()atau=== nullsebagai gantinya.
Cek apakah form sudah dikirim
isset() adalah cara klasik untuk melihat apakah sebuah field form sudah dikirim. Jalankan blok ini, ketik sebuah nama, lalu tekan Send: script yang sama berjalan lagi dengan $_POST yang sudah terisi.
Field teks yang kosong tetap dikirim, sebagai "", jadi isset($_POST["name"]) bernilai true setelah submit apa pun. Checkbox yang tidak dicentang sama sekali tidak dikirim, sehingga isset() adalah pengujian yang paling tepat untuk checkbox. Untuk mewajibkan nilai yang tidak kosong, periksa string yang sudah di-trim seperti yang dilakukan blok ini. Halaman form membuat form lengkap dengan validasi.
isset vs array_key_exists
Keduanya sepakat dalam segala hal kecuali key yang nilainya null. isset() menganggapnya tidak ada, array_key_exists() tidak.
Jika "diisi dengan null" punya arti yang berbeda dari "belum dikonfigurasi" di datamu, pakai array_key_exists(). Selain itu isset() lebih singkat, dan karena ia konstruksi bahasa, bukan pemanggilan fungsi, ia juga sedikit lebih cepat.
Kesalahan umum: isset pada ekspresi
isset() hanya menerima variabel, elemen array, dan property. Memberikan hasil fungsi atau konstanta adalah error kompilasi:
<?php
if (isset(trim($input))) {}
PHP Fatal error: Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2
Simpan hasilnya di variabel lebih dulu, atau uji nilainya secara langsung: null !== $expr seperti yang disarankan pesannya, atau trim($input) !== "" untuk string.
Pertanyaan yang sering diajukan
Apa fungsi isset() di PHP?
isset($x) mengembalikan true jika $x ada dan tidak bernilai null, dan false jika tidak. Fungsi ini tidak pernah memunculkan warning untuk variabel atau key array yang tidak terdefinisi, jadi aman dipakai pada data request seperti isset($_POST['email']).
Apa perbedaan isset() dan empty() di PHP?
isset() bertanya "apakah ini ada dan tidak null"; empty() bertanya "apakah ini tidak ada atau falsy". Untuk 0, "", "0", dan [], isset() mengembalikan true dan empty() juga mengembalikan true. Untuk null atau key yang tidak ada, isset() bernilai false dan empty() bernilai true. !empty($x) sama dengan isset($x) && $x yang bernilai truthy.
Bisakah isset() memeriksa beberapa variabel?
Bisa: isset($a, $b, $c) mengembalikan true hanya jika setiap variabel itu sudah diisi dan tidak bernilai null. Pemeriksaannya berhenti di variabel pertama yang belum diisi.
Sebaiknya saya memakai isset() atau array_key_exists()?
Keduanya hanya berbeda saat key-nya ada dengan nilai null: isset($arr['k']) mengembalikan false, array_key_exists('k', $arr) mengembalikan true. Pakai array_key_exists saat null adalah nilai tersimpan yang punya arti; selain itu isset lebih singkat dan sedikit lebih cepat.