2009-11-26 101 views
7

我發現有很多if-else語句,尤其是嵌套if語句時,這些語句使得我的代碼不易讀。如何減少PHP中if語句的數量?如何減少PHP中if-else語句的數量?

我的提示如下: 1.在合適的時候使用switch語句; 2.在可行時使用exit()語句; 3.在可行時使用三元語句;

是否有其他技巧可以減少if else語句,尤其是嵌套的if-else語句?

回答

17

將您的代碼重構爲更小的工作單元。過多的條件邏輯是代碼異味,通常表明你的函數需要重構。

3

使用三元運算符,重構你的代碼,編寫一個函數或者一個完成if語句所需的類。

1

多態性可以擺脫一些的爲好,allthough更難實現減少的if/else在PHP,因爲它不是類型安全的...

19

嘗試使用「早日重返」如果可能的話,以減少嵌套深度。嘗試使用布爾表達式評估。

例子:

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這是非常重要的,因爲它可以減少幾KB的文件大小! – Xeoncross 2009-11-26 15:22:29

+0

+1也適用於繼續,休息,拋出。您通常可以保持較低的循環複雜度,從而使代碼更具可讀性。 – NikiC 2011-09-25 11:57:05

+5

另外我個人只會使用'return userIsLoggedIn()&& is_array($ param)&& $ param ['count']> 0;'這裏。它簡短而簡潔。 – NikiC 2011-09-25 12:00:02

9

有重構和簡化了很多if條件的官方學術方法,稱爲卡諾圖

它需要多種測試條件,並試圖協助創建涵蓋所有必需案例的簡化if陳述。

您可以通過wiki here瞭解關於它的更多信息。

1

我工作的很多代碼都充滿了不斷髮展的業務邏輯,需要每隔一天修改一次。兩個提示確實幫助我跟上修改:避免所有其他語句,並儘快返回/退出。永遠不要深入嵌套 - >創建子例程/函數。

與否定更換所有else語句if語句使代碼更易於閱讀從上到下(在condtion的接近性代碼塊):

# 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 
} 

其次,返回/退出儘快。我當然認爲,但是當你已經確定了子程序的結果時,特別是當你想從上到下閱讀代碼時,我並沒有看到任何額外的條件/測試。消除所有歧義使事情變得更簡單。

總之,我喜歡避免在BL的長列表中使用其他字符。知道結果後立即返回。如果嵌套級別大於2,則創建子例程/函數。

+0

這當然可以重構爲: – 2011-10-01 20:20:18