isset($var), değişken varsa ve değeri null değilse true döndürür. Tanımsız, unset edilmiş ya da null tutan bir değişken için false döndürür ve asla uyarı yazdırmaz.
isset() yalnızca bir şeyin orada olup olmadığına bakar. 0, "" veya [] gibi atanmış ama boş bir değer yine true döndürür. "Atanmış ve boş değil" istiyorsanız empty fonksiyonunu (olumsuzlayarak) kullanın.
isset ile bir dizi anahtarının var olup olmadığını kontrol etmek
isset() en çok burada kullanılır. Var olmayan bir anahtarı okumak normal bir PHP kurulumunda Warning: Undefined array key yazdırır; önce isset() ile kontrol etmek yazdırmaz. İç içe anahtarlarda da çalışır ve eksik ilk seviyede sessizce durur.
Yalnızca değere ya da bir varsayılana ihtiyacınız olduğunda $user["website"] ?? "none" aynı kontrolü tek adımda yapar. Null birleştirme operatörüne bakın.
Birden çok değişkenle isset
Birkaç argüman geçirin; isset() yalnızca hepsi atanmış ve null değilse true döndürür. Gerekli her alanın gelip gelmediğini kontrol etmenin kısa bir yoludur.
Stringlerde ve nesnelerde isset
Bir stringde isset($str[5]), 5. konumda bir karakter olup olmadığını kontrol eder; bu da hızlı bir uzunluk kontrolüdür. Bir nesnede bir özelliği kontrol eder; özel verisi olan bir sınıfta, sınıf __isset() metodunu tanımlıyorsa isset() onu çağırır.
isset, empty ve is_null
Üç kontrolü ve düz (bool) dönüştürmesini karşılaştırmak için tabloda bir $x değeri seçin. Her hücre PHP 8.3 ile hesaplandı.
| $x | isset | empty | is_null | bool |
|---|---|---|---|---|
| null | ||||
| false | ||||
| 0 | ||||
| "0" | ||||
| "" | ||||
| " " | ||||
| [] | ||||
| "a" | ||||
| 1 | ||||
| 0.0 | ||||
| "0.0" |
Hatırlanacak kalıp:
isset()yalnızcanullve var olmayan şeyler içinfalseolur.empty()bunlar için ve ayrıca her falsy değer içintrueolur:false,0,0.0,"","0",[].is_null(), var olan değişkenler içinisset()fonksiyonunun tersini verir, ama değişken tanımsız olduğunda uyarı verir. Bunun yerineisset()veya=== nullkullanın.
Bir formun gönderilip gönderilmediğini kontrol etmek
isset(), bir form alanının gelip gelmediğini görmenin klasik yoludur. Bu bloğu çalıştırın, bir isim yazın ve Send'e basın: aynı betik $_POST dolu olarak yeniden çalışır.
Boş bir metin alanı yine de "" olarak gönderilir, bu yüzden herhangi bir gönderimden sonra isset($_POST["name"]) true olur. İşaretlenmemiş bir onay kutusu ise hiç gönderilmez; bu da isset() fonksiyonunu onay kutuları için tam doğru test yapar. Boş olmayan bir değer şart koşmak için bloğun yaptığı gibi kırpılmış stringi kontrol edin. Formlar sayfası doğrulamalı eksiksiz bir form oluşturur.
isset ile array_key_exists
İkisi, değeri null olan bir anahtar dışında her şeyde aynı sonucu verir. isset() onu eksik sayar, array_key_exists() saymaz.
Verinizde "null olarak ayarlanmış" ile "yapılandırılmamış" farklı şeyler ifade ediyorsa array_key_exists() kullanın. Aksi hâlde isset() daha kısadır ve bir fonksiyon çağrısı değil bir dil yapısı olduğu için biraz daha hızlıdır.
Sık yapılan hata: bir ifade üzerinde isset
isset() yalnızca değişkenleri, dizi elemanlarını ve özellikleri kabul eder. Bir fonksiyon sonucu veya bir sabit geçirmek bir derleme hatasıdır:
<?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
Sonucu önce bir değişkende saklayın ya da değerin kendisini test edin: mesajın önerdiği gibi null !== $expr ya da bir string için trim($input) !== "".
Sıkça Sorulan Sorular
PHP'de isset() ne işe yarar?
isset($x), $x var ve null değilse true, değilse false döndürür. Tanımsız bir değişken veya dizi anahtarı için asla uyarı vermez, bu yüzden isset($_POST['email']) gibi istek verilerinde güvenlidir.
PHP'de isset() ile empty() arasındaki fark nedir?
isset() "bu var mı ve null değil mi" diye sorar; empty() ise "bu eksik mi ya da falsy mi" diye sorar. 0, "", "0" ve [] için isset() true döndürür, empty() de true döndürür. null veya eksik bir anahtar için isset() false, empty() ise true olur. !empty($x), isset($x) && $x ifadesinin truthy olmasıyla aynıdır.
isset() birden fazla değişkeni kontrol edebilir mi?
Evet: isset($a, $b, $c) yalnızca her biri atanmış ve null değilse true döndürür. Atanmamış ilk değişkende durur.
isset() mi yoksa array_key_exists() mi kullanmalıyım?
Yalnızca anahtar null değeriyle var olduğunda farklılaşırlar: isset($arr['k']) false, array_key_exists('k', $arr) ise true döndürür. null anlamlı bir saklanan değer olduğunda array_key_exists kullanın; aksi hâlde isset daha kısa ve biraz daha hızlıdır.