2009-11-26 25 views
7

Birçok if-else ifadesinin bulunduğunu, özellikle de else ifadelerinin iç içe geçtiğini, bu ifadelerin kodumu daha az okunabilir hale getirdiğini buldum. PHP'deki ifadelerin sayısı nasıl azaltılabilir?PHP'de if-else ifadelerinin sayısı nasıl azaltılır?

İpuçlarıim aşağıdaki gibidir: 1. Uygun olduğunda bir anahtar deyimi kullanın; 2.use exit() ifadesi uygun olduğunda; 3. Uygun olduğunda üçlü deyimi kullanın;

Özellikle de if-else ifadelerinde iç içe geçmiş ifadeler varsa, azaltabilecek başka ipuçları var mı?

cevap

17

Kodunuzu daha küçük çalışma birimlerine dönüştürün. Çok fazla koşullu mantık bir kod kokusu ve genellikle işlevinizin yeniden yapılandırılması gerektiğini gösterir.

3

Üçlü operatörü kullanın, kodunuzu yeniden düzenleyin, bir işlev yazın ya da eğer gerekli ise tüm ifadeleri içeren bir sınıf yazın.

1

polimorfizmi

19

deneyin için "erken dönmek" mümkün kullanmak ... Bu türü güvenli değil olarak PHP'de if/else azaltmak için uygulamak zor allthough yanı birkaç temizleyecektir yuvalama derinliğini azaltın. Boole ifadesi değerlendirmeyi kullanmayı deneyin.

Örnek: Böyle yazabilirsiniz

function foo($param) 
{ 
    $ret = false; 

    if(userIsLoggedIn()) { 
     if(is_array($param)) { 
      if($param['count'] > 0) { 
       $ret = true; 
      } 
      else { 
       $ret = false; 
      } 
     }   
    } 

    return $ret; 
} 

:

function foo($param) 
{ 
    if(!userIsLoggedIn()) return false; 
    if(!is_array($param)) return false; 
    return $param['count'] > 0; 
} 
+0

+1 Dosya boyutunu birkaç KB azaltabileceğinden bu çok önemlidir! – Xeoncross

+0

+1 Ayrıca devam etmek, kırmak, atmak için de geçerlidir.Sıklıkla döngüsel karmaşıklığı bu şekilde düşük tutabilir ve böylece kodu daha okunabilir hale getirebilirsiniz. – NikiC

+5

Ayrıca kişisel olarak sadece 'return userIsLoggedIn() && is_array ($ param) && $ param ['count']> 0;' i kullanıyorum. Kısa ve özlü. – NikiC

9

planı ayrı ve if koşulları bir çok basitleştirmek için resmi bir akademik yöntemi yoktur, Karnaugh eşleme aradı.

Birden çok test koşulunu gerektirir ve gerekli tüm vakaları kapsayan Basitleştirilmiş if ifadelerinin oluşturulmasına yardımcı olmaya çalışır.

Daha fazla bilgiyi wiki here adresinden öğrenebilirsiniz.

1

Sürekli gelişen iş mantığıyla dolu ve her geçen gün değiştirilmesi gereken çok fazla kod üzerinde çalışıyorum. Değişikliklere devam etmeme yardımcı olan iki ipucu: Tüm diğer ifadelerden kaçın ve mümkün olan en kısa sürede geri dön/çık. Asla derin iç içe geçme -> alt rutinler/fonksiyonlar yaratma. ifadeleri kodunuzu çok daha kolay alt (condtion yakınlığı ve kod bloğu) için üst okumak için yaparsa

reddedildiği ile her şeyin ifadeleri Değiştirme:

# business logic block 
if ($condition) { 
    # do something 
    # code code code 
} else { 
    # code code code 
    return; 
} 

# refactored: 
if (! $contition) { 
    # code code code 
    return; 
} 
if ($condition) { 
    # code code code 
} 

İkincisi, en kısa sürede geri dönüş/çıkış . Benim görüşüme göre, ancak alt programın sonucunu zaten belirledikten sonra, özellikle de kodu yukarıdan aşağıya okumak istediğinizde, herhangi bir ekstra koşul/testten geçme noktasını göremiyorum. Tüm belirsizlikleri ortadan kaldırmak işleri kolaylaştırıyor. Sonuç olarak, özellikle uzun BL listelerinde özellikle kullanmaktan kaçınmayı sonlandırmak isterim. Sonucu bildiğiniz anda geri dönün. Yuvalama seviyesi 2'den fazlaysa, alt rutinler/işlevler oluşturun.

+0

Bu, elbette aşağıdaki gibi tekrar olarak tekrar düzeltilebilir: –