- Konu sahibi
- #1
PHP’de
Bu örnekte
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.
Yeni PHP kodlarında aynı varsayılan değer davranışı çoğu durumda daha kısa biçimde yazılabilir:
Bir dizi anahtarının varlığını kontrol etmek için doğrudan
Birden fazla değişkeni aynı anda kontrol ettiğinizde hepsinin tanımlı ve
Aşağıdaki tablo, sık karıştırılan durumları ayırır:
Bu ayrım önemlidir: Amacınız yalnızca değerin gönderilip gönderilmediğini anlamaksa
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ğer | isset() sonucu | Anlamı |
|---|---|---|
| Değişken yok | false | Değişken tanımlanmamış |
| null | false | Değişken tanımlı ancak boşluk değeri null |
| 0 veya false | true | Geçerli bir değer mevcut |
| Boş metin veya boş dizi | true | Değ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,falseve boş metinisset()tarafından mevcut kabul edilir. -
isset($dizi['anahtar'])ile anahtarın değerininullolarak saklama durumunu ayırt etmeye çalışmak. Anahtar mevcut olsa bile değerinullise sonuçfalseolur. Anahtarın gerçekten bulunup bulunmadığı önemliysearray_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.