Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
PHP’de isset(), bir değişkenin tanımlı olup olmadığını ve değerinin null olmadığını kontrol eden dil yapısıdır. Sonuç olarak true veya false döndürür. Değişken hiç tanımlanmamışsa ya da null değerindeyse false; 0, false, boş metin ve boş dizi gibi değerlerde ise true döner.

Nasıl çalışır?​


isset($degisken) ifadesi iki şeyi birlikte sınar: Değişken mevcut mu ve değeri null değil mi? Bu kontrol, tanımsız bir değişkene doğrudan erişmeye kıyasla güvenlidir; PHP uyarısı üretmeden false sonucunu alırsınız.

Kod:
<?php
$ad = "Ayşe";
$puan = 0;
$aciklama = null;

var_dump(isset($ad));         // bool(true)
var_dump(isset($puan));       // bool(true)
var_dump(isset($aciklama));   // bool(false)
var_dump(isset($olmayan));    // bool(false)

Bu örnekte $puan değerinin sıfır olması değişkeni tanımsız yapmaz. Buna karşılık $aciklama tanımlı olsa da değeri null olduğu için isset() sonucu false olur.

Pratik kullanım​


Bir formdan, URL’den veya dizi elemanından gelen değeri kullanmadan önce kontrol edebilirsiniz. Değer varsa onu kullanır, yoksa varsayılan bir değer belirlersiniz. Aşağıdaki web örneği ayrıca ?ad[]=x gibi dizi girdisini reddeder ve adı HTML metni olarak kaçışlar; bunları isset kendisi yapmaz.

Kod:
<?php
$kullaniciAdi = isset($_GET['ad']) ? $_GET['ad'] : 'Ziyaretçi';

if (!is_string($kullaniciAdi)) {
    http_response_code(400);
    exit('Ad metin olmalı.');
}
echo htmlspecialchars($kullaniciAdi, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');

$_GET['ad'] gönderilmemişse sonuç Ziyaretçi olur. Parametre gönderilmiş fakat boş metin olarak verilmişse isset() yine true döndürür; çünkü boş metin null değildir. Boş değerleri de reddetmek istiyorsanız ayrıca trim() veya uygun bir doğrulama koşulu kullanmalısınız.

Yeni PHP kodlarında aynı varsayılan değer davranışı çoğu durumda daha kısa biçimde yazılabilir:

Kod:
<?php
$kullaniciAdi = $_GET['ad'] ?? 'Ziyaretçi';

?? operatörü, sol taraf tanımsızsa veya null ise sağdaki değeri seçer. Ancak 0, false ve boş metin gibi değerleri geçerli kabul eder; bu nedenle isset() ile aynı temel mantığa sahiptir.

Dizilerde ve birden fazla değişkende kullanım​


Bir dizi anahtarının varlığını kontrol etmek için doğrudan isset() kullanabilirsiniz:

Kod:
<?php
$ayarlar = [
    'tema' => 'acik',
    'bildirim' => false,
];

if (isset($ayarlar['tema'])) {
    echo $ayarlar['tema'];
}

Birden fazla değişkeni aynı anda kontrol ettiğinizde hepsinin tanımlı ve null dışında olması gerekir:

Kod:
<?php
if (isset($ad, $soyad, $eposta)) {
    echo 'Gerekli alanlar mevcut.';
}

Aşağıdaki tablo, sık karıştırılan durumları ayırır:

Değerisset() sonucuAnlamı
Değişken yokfalseDeğişken tanımlanmamış
nullfalseDeğişken tanımlı ancak boşluk değeri null
0 veya falsetrueGeçerli bir değer mevcut
Boş metin veya boş dizitrueDeğer mevcut, fakat içeriği boş

Bu ayrım önemlidir: Amacınız yalnızca değerin gönderilip gönderilmediğini anlamaksa isset() uygundur. “Boş olmasın”, “sayı olsun” veya “e-posta biçiminde olsun” gibi kurallar için ayrıca doğrulama yapmanız gerekir.

Sık yapılan hatalar​


  • isset($deger) sonucunu, değerin dolu olduğu anlamında kullanmak. Sıfır, false ve boş metin isset() tarafından mevcut kabul edilir.
  • isset($dizi['anahtar']) ile anahtarın değerini null olarak saklama durumunu ayırt etmeye çalışmak. Anahtar mevcut olsa bile değeri null ise sonuç false olur. Anahtarın gerçekten bulunup bulunmadığı önemliyse array_key_exists() kullanılmalıdır.
  • Kullanıcı girdisini yalnızca isset() ile doğrulanmış sanmak. Bu işlev sadece varlık kontrolü yapar; tür, uzunluk, biçim veya izin kontrolü yapmaz.

Sık sorulan sorular​

"0" metni için empty ile isset aynı sonucu verir mi?​

Hayır. Sıfırı ifade eden "0" metni isset için mevcut ve null olmayan değerdir; empty ise bunu boş kabul eder. Sayaç veya miktar gibi sıfırın geçerli olduğu alanı yalnız empty ile reddetmeyin. Kontrolü, alanın gerçek tür ve değer kuralına göre seçin.

API’de gönderilmeyen alan ile bilerek null gönderilen alan nasıl ayrılır?​

Çözümlenmiş dizi üzerinde anahtar varlığı gerekiyorsa array_key_exists kullanın; isset ikisinde de false verebilir. Örneğin güncellemede atlanan alanı korumak, null gönderilen alanı temizlemek farklı iş kuralları olabilir. Önce sözleşmeyi belirleyin; yalnız kontrol fonksiyonunu değiştirmek alanın ne anlama geldiğine karar vermez.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.