İlgilenenler için, ben biraz daha iyi yapılandırılmış biçimde aşağıdaki bilgileri sağlayan küçük bir makalede, bu konuyu da genişlettik: The Definitive Guide To PHP's isset And empty
Sadece app "E_NOTICE uyumlu" hale, ama her şeyi yeniden olmadığını düşünmek gerekir IMHO. hundreds düzenli olmayan değişkenleri kullanmaya çalışın kodunuzda puan olması oldukça kötü yapılandırılmış bir program gibi geliyor. Olmayan değişkenler hiç gerçekleşmesi asla erişmeye çalışırken, diğer dillerde derleme zamanında bu ürkmek. PHP bunu yapmak için izin verdiği gerçeği gerektiği anlamına gelmez.
Bu uyarılar sizi rahatsız etmek değil, help sizin için vardır. Eğer bir uyarı "You're trying to work with something that doesn't exist!" alırsanız, sizin tepkiniz "Oops, my bad, let me fix that ASAP." başka nasıl "variables that work just fine undefined" ve honestly wrong code that may lead to serious errors arasındaki farkı anlatmak için gidiyoruz olmalıdır? Bu da her zaman, always, hata raporlama turned to 11 ile geliştirmek ve tek bir NOTICE
verilir kadar değil kodunuzu uzak takmayı tutmak nedeni de budur. Off raporlama hatası dönüm bilgi sızıntısını önlemek ve hatta arabası kod karşısında daha iyi bir kullanıcı deneyimi sağlamak için, sadece üretim ortamları için olduğunu.
Ayrıntı için:
Her zaman isset
ihtiyaç veya empty
yere kodu olacak, onların oluşumunu azaltmak için tek yolu düzgün değişkenlerini başlatmak için olduğunu. Duruma bağlı olarak bunu yapmak için farklı yolları vardır:
Fonksiyon argümanları:
function foo ($bar, $baz = null) { ... }
Onların değerini {değerlendirilirse $bar
veya sadece bunları ayarlamak için $baz
işlevinin içinde ayarlanır, sen dert etmenize gerek tüm olup olmadığını kontrol etmek gerek [(2)] var } veya false
(ya da başka ne olursa olsun).
Her yerde normal değişkenler:
$foo = null;
$bar = $baz = 'default value';
Eğer bunları kullanmak için gidiyoruz hangi kod bloğunun üstündeki değişkenlerini başlatmak. Bu, !isset
sorunu çözer değişkenler her zaman bilinen bir varsayılan değere sahip olmasını sağlar, okuyucuya aşağıdaki kod üzerinde çalışacak bir fikir verir ve böylece de kendini belgelerin bir tür olarak hizmet vermektedir.
Diziler:
$defaults = array('foo' => false, 'bar' => true, 'baz' => 'default value');
$values = array_merge($defaults, $incoming_array);
Yukarıdaki gibi aynı şey, varsayılan değerlerle dizi başlatılıyor ve gerçek değerleri ile onları üzerine ediyoruz.
Geri kalan durumlarda, diyelim ki ya bir kontrolör tarafından belirlenen olmayabilir değerleri çıktılıyorsanız bir şablon diyelim, sadece kontrol etmek gerekir:
<table>
<?php if (!empty($foo) && is_array($foo)) : ?>
<?php foreach ($foo as $bar) : ?>
<tr>...</tr>
<?php endforeach; ?>
<?php else : ?>
<tr><td>No Foo!</td></tr>
<?php endif; ?>
</table>
Kullanarak kendiniz düzenli bulursanız array_key_exists
, sizin için kullanıyoruz ne değerlendirmelidir. Bir fark yapar sadece zaman burada:
$array = array('key' => null);
isset($array['key']); // false
array_key_exists('key', $array); // true
Rağmen yukarıda belirtildiği gibi düzgün değişkenleri başlatırken eğer öyle biliyorum çünkü, sen, anahtar var ya da kontrol etmek gerekmez. Eğer harici bir kaynaktan dizi alıyorsanız, değeri muhtemelen olmayacaktır null
ama ''
, 0
, '0'
false
ya da bunun gibi bir şey, bir değere yani sizin niyet bağlı olarak, isset
veya empty
ile değerlendirebilir. Düzenli null
bir dizi anahtarı ayarlayın ve bir şey ama false
, yani demek istiyorum eğer yukarıdaki örnekte isset
ve {[farklılaşan sonuçlar (10)]} program mantığı bir fark yaratmak, neden kendinize sormalısınız. Bir değişkenin sadece varlığı önemli olmamalıdır, sadece değer bir sonuç olmalıdır. Anahtar a true
/ false
bayrak ise, o zaman kullanmak true
ya da false
değil, null
. Bunun tek istisnası null
şey demek istiyorum 3. parti kütüphaneler olabilir, ama null
Bunu yapan herhangi bir kütüphaneyi bulmak için henüz PHP tespit etmek çok zor olduğundan olur.