Bu yazmak için daha iyi (yani, daha okunabilir) bir yolu var mı?
if (isset($input_vars['directive']) && $input_vars['directive'] == 'edit') {
Gerçekten, ne yazık ki. Bir fonksiyonun içinde bu kodu sarın ve sadece her zaman bu ihtiyacı diyebiliriz.
function compareArrayItem($array, $key, $value) {
return isset($array[$key]) && $array[$key] == $value;
}
if (compareArrayItem($input_vars, 'directive', 'edit')) {
// Do something
}
Ama bu tür anlamsız bana (ve daha az okunabilir orijinal kod daha) görünüyor. Eğer tüm ilk ifadeyi gerekmez böylece Yoksa E_NOTICE dahil değil hata raporlama seviyesini düşürebilir.
error_reporting(E_ALL ^ E_NOTICE);
if ($input_vars['directive'] == 'edit') //...
Ama sadece kodunuzu kısaltılması uğruna bunu tavsiye etmem.
Ben olsaydım, ben istiyorum sadece leave it alone. Olduğu gibi-gayet iyi.
Eğer $input_vars bilinen ve size söz denetler tüm aşağıdaki yardımcı işlevi yapacak yerinde var olan izin verilen değerlerin kümesi:
function item ($array, $key) {
if (isset ($array [$key]))
return $array [$key];
else
return NULL; // Or use whatever is more appropriate
}
Sonra orijinal kod gibi görünmek için değiştirilebilir
if (item ($input_vars, 'directive') == 'edit') { ...
Bu sadece daha okunabilir, ama aynı zamanda tekrarını ortadan kaldırır: dizi değişkeni ve anahtar hem de sadece bir kez görünür.
Ben birden fazla değer karşı $ input_vars ['yönerge'] test olacağım tahmin için gidiyorum (aksi halde, neden sadece basit bir boolean $ input_vars ['edit'] veya benzer saklanan olmazdı?). ('Display' Y yaparsak 'edit' X yaparsanız başka,) ben de o Testlerin birbiri ardına yapıyoruz ki bir tahmin tehlike olur.
Içerde beyanı ve yuva diğerleri (switch / case akış kötü bir seçim olmaz) eğer böyle bir durumda, sadece bir in isset () testi koydu.