İlgilenenler için, bu konuyu, aşağıdaki bilgileri biraz daha iyi yapılandırılmış bir biçimde sağlayan küçük bir makaleye genişlettim: The Definitive Guide to PHP's isset And empty
IMHO sadece uygulamayı "E_NOTICE uyumlu" yapmayı değil, her şeyi yeniden yapılandırmayı düşünmelisiniz. Having yüzlerce kodunuzda noktalarının düzenli oldukça kötü yapılandırılmış program gibi varolmayan değişkenler sesleri kullanmayı deneyin. Varolmayan değişkenlere erişmeye çalışmak asla olmamalıdır, diğer diller derleme zamanında buna karşı koyarlar. PHP'nin bunu yapmanıza izin vermesi, yapmanız gerektiği anlamına gelmez.
Bu uyarılar sizi kızdırmak için değil, size yardımcı olmak için var. "Var olmayan bir şeyle çalışmaya çalışıyorsunuz!" Uyarısı alırsanız , tepkiniz "Oops, benim hatam, en kısa zamanda düzeltmeme izin verin." Başka nasıl ayırt edeceğiz "iş gayet tanımlanmamış olduğu değişkenler" ve ciddi hatalara yol açabilir dürüstçe yanlış kod ? Bu aynı zamanda, her zaman, her zaman , hata raporlamasını 11'e döndürerek geliştirmenizin ve tek bir hata kalmayıncaya kadar kodunuzu kapatmaya devam etmenizin nedenidir.NOTICE
verilir. Hata raporlamayı kapatmak, bilgi sızıntısını önlemek ve hatalı kod karşısında bile daha iyi bir kullanıcı deneyimi sağlamak için yalnızca üretim ortamları içindir.
Detaylandırmak için:
Her zaman ihtiyacınız olacak isset
veya empty
kodunuzun herhangi bir yerinde, bunların oluşumunu azaltmanın tek yolu değişkenlerinizi doğru şekilde başlatmaktır. Duruma bağlı olarak, bunu yapmanın farklı yolları vardır:
Fonksiyon argümanları:
function foo ($bar, $baz = null) { ... }
Olmadığını kontrol etmek için gerek yoktur $bar
veya $baz
varsa onların değer değerlendirir etmektir hakkında sadece bunları çünkü işlevi içinde ayarlanır, bütün endişe gerekir true
veya false
(veya ne olursa olsun başka).
Her yerde normal değişkenler:
$foo = null;
$bar = $baz = 'default value';
Değişkenlerinizi kullanacağınız bir kod bloğunun en üstünde başlatın. Bu, !isset
sorunu çözer, değişkenlerinizin her zaman bilinen bir varsayılan değere sahip olmasını sağlar, okuyucuya aşağıdaki kodun ne üzerinde çalışacağı konusunda bir fikir verir ve böylece bir tür kendi kendini belgelendirme işlevi görür.
Diziler:
$defaults = array('foo' => false, 'bar' => true, 'baz' => 'default value');
$values = array_merge($defaults, $incoming_array);
Yukarıdaki ile aynı şekilde, diziyi varsayılan değerlerle başlatıyorsunuz ve bunların üzerine gerçek değerlerle yazıyorsunuz.
Kalan durumlarda, bir denetleyici tarafından ayarlanabilen veya ayarlanmayan değerleri çıktıladığınız bir şablon diyelim, sadece kontrol etmeniz gerekecek:
<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>
Kendinizi düzenli olarak kullanırken bulursanız array_key_exists
, ne için kullandığınızı değerlendirmelisiniz. Fark yarattığı tek zaman burası:
$array = array('key' => null);
isset($array['key']);
array_key_exists('key', $array);
Yine de yukarıda belirtildiği gibi, değişkenlerinizi doğru şekilde başlatıyorsanız, anahtarın var olup olmadığını kontrol etmenize gerek yoktur, çünkü var olduğunu biliyorsunuz. Eğer harici bir kaynaktan dizi alıyorsanız, değer büyük olasılıkla olmayacak null
ama ''
, 0
, '0'
, false
veya bir benzeri, yani bir değer ile değerlendirebilir isset
ya empty
da niyet bağlı. Düzenli olarak bir dizi anahtarını ayarladıysanız null
ve bunun bir şey ifade etmesini istemiyorsanız false
, örneğin yukarıdaki örnekte program mantığınızın farklı sonuçları isset
ve array_key_exists
program mantığınızda bir fark yaratıyorsa, kendinize nedenini sormalısınız. Bir değişkenin salt varlığı önemli olmamalı, sadece değeri önemli olmalıdır. Anahtar bir true
/ false
bayrak ise, o zaman kullanıntrue
ya da false
değil null
. Bunun tek istisnası, bir null
şey ifade etmek isteyen 3. parti kütüphaneler olabilir , ancak null
PHP'de tespit edilmesi çok zor olduğundan , bunu yapan herhangi bir kütüphane bulamadım.