2010-05-06 38 views
6

Bunu yazmanın daha iyi (yani daha okunaklı) bir yolu var mı?Bunu yazmanın daha iyi yolu?

if (isset($input_vars['directive']) && $input_vars['directive'] == 'edit') { 
+6

Sanırım yeterince okunabilir, niçin değiştirmek istiyorsun? Ayrıca okunabilirlik aynı zamanda ne düşündüğünüze, sizin de bize göre değil, ne kadar değiştiğine bağlıdır. –

+0

Aldığı kadar okunabilir. –

+0

Bu $ input_vars dizisi ne için? Kullanıcı tanımlı değişken nasıl ayarlanamaz? Böyle bir diziye sahip olmanın tek nedeni, önceden tanımlanmış anahtarlarla doldurmaktır, bu tuşların her zaman ayarlanması, yani, isset() ile kontrol edilmesine gerek yoktur. Aksi halde neden $ _REQUEST kullanmıyorsunuz? –

cevap

5

Maalesef değil. Bu kodu bir işlevle sarın ve buna her ihtiyaç duyduğunuzda bunu çağırabilirsiniz.

function compareArrayItem($array, $key, $value) { 
    return isset($array[$key]) && $array[$key] == $value; 
} 

if (compareArrayItem($input_vars, 'directive', 'edit')) { 
    // Do something 
} 

Ancak bu bana göre bir anlam ifade etmiyor (ve orijinal kodunuzdan daha az okunabilir). Ya da hata raporlama seviyesini E_NOTICE içermeyecek şekilde azaltabilirsiniz, böylece ilk ifadeye ihtiyacınız olmaz.

error_reporting(E_ALL^E_NOTICE); 

if ($input_vars['directive'] == 'edit') //... 

Ancak bunu yalnızca kodunuzu kısaltmak için yapmanız önerilmez.

Senin yerinde olsaydım, sadece yalnız bırakırım. Olduğu gibi iyidir.

+0

'$ input_vars'' $ _POST' ve '$ _GET' sarar, bu yüzden sadece" daha erken ayarlanamaz ". Orijinal devlerin bunu neden yaptığını bilmiyorum ve sadece $ _REQUEST 'i kullanmadım. –

+0

@ gms8994: O zaman yalnız bırak. Bana iyi görünüyor ve okunabilir. İdeal olmaktan biraz daha uzun olabilir, ama bu bir şey değil, IMO. Bu bilgiyi dahil etmek için sorunuzu düzenlemek isteyebilirsiniz, çünkü bu önemli ... –

-1

Aşağıdakiler her zaman aynı sonucu verir.

if($input_vars['directive'] == 'edit'){ 

Bunun nedeni, eğer ayarlanmamışsa, eğer 'edit' değilse, 'edit' ise, o zaman onun setidir.

Bu durum bir bildirim döndürür; ancak bu özelliği, PHP kurulumunuzdan bu özelliği devre dışı bırakabilirsiniz.

if(@$input_vars['directive']=='edit') { 

biraz daha okunabilir olur ve direktif yoksa o uyarıları üretmez:

+1

Bu değerin hatalarını ortaya çıkaracak mı değil mi? –

+3

Yönerge anahtarı ayarlanmamışsa, var olmayan bir dizin hakkında bir bildirim alırsınız. – Simon

+0

Sadece denedim ve bunun nedeni, sistemimin kapalı olduğunu fark etti. İstersen bunu yapabilirsin. –

-2

derdim.

+1

bu önerilmez. * @ * Kullanarak sessiz uyarılar, kodu takip etmek için çok zor hale getirebilir. Ayrıca sadece yapmak için fazla olan bir çok –

+0

şimdi iki sorunumuz var. – GOD

0

$ input_vars ['directive'] 'ı birden fazla değere karşı test edeceğinizi tahmin edeceğim (aksi halde, neden sadece $ input_vars [' edit ']' de saklanan basit bir boole sahip olmuyorsunuz veya benzer?). Aynı zamanda bu testleri bir diğerinden sonra yaptığınızı tahmin ediyorum (eğer 'X' düzenleme ',' display 'Y ise).

Böyle bir durumda, isset() testini bir if ifadesine koyun ve diğerlerini bunun içine yerleştirin (anahtar/durum akışı kötü bir seçim olmaz). $input_vars izin değerler kümesinin bilinen ve söz çekleri biryere olan ise şu yardımcı işlevi

1

yapacağız:

function item ($array, $key) { 
    if (isset ($array [$key])) 
     return $array [$key]; 
    else 
     return NULL; // Or use whatever is more appropriate 
}

Sonra orijinal kod

benzeyecek şekilde değiştirilebilir
if (item ($input_vars, 'directive') == 'edit') { ... 

Bu yalnızca daha okunabilir değil, aynı zamanda çoğaltma işlemini de kaldırır: her iki dizi değişkeni ve anahtarı yalnızca bir kez görünür.

İlgili konular