2012-08-23 29 views
0

所以,我想有更好的理解,當陣列未設置開關將如何行動,如果我應該使用isset()和/或default:行爲的PHP開關陣列時沒有設置

例如,目前我正在使用的代碼:

$parameters['sort'] = NULL; 

if(isset($parameters['sort'])) { 

    switch($parameters['sort']) 
    { 
     case 'relevance': 
      $parameters['sort'] = 'rating'; 
     break; 
     case 'published': 
      $parameters['sort'] = 'updated'; 
     break; 
     case 'views': 
      $parameters['sort'] = 'viewCount'; 
     break; 
    } 

} 

注:我知道break;沒有右縮進(應該是如下),但它是我喜歡如何switch()使用它。

注2:我只是回顧我的代碼來修復bug和改進,同時使得如何東西要正確實現更好的感覺/使用

case 'relevance': 
     $parameters['sort'] = 'rating'; 
     break; 

所以我的問題是,我要補充的額外default並刪除if()或繼續使用if(),因爲它沒有造成任何問題?使用兩者都沒有任何意義!

default: 
     $parameters['sort'] = ''; 
    break; 

回答

1

default選擇將在檢查所有以前的比較後選擇。如果默認是最常見的選擇,代碼將被大量執行,我認爲您應該堅持if子句,並且您不必信任任何自動優化來節省處理器時間。

+1

確定下來,這就是我正在尋找的內容,並且具有正確的邏輯我錯過了。非常感謝您分享您的知識 – Alex

0

這是個人喜好,但我會親自去除if語句並將默認值添加到交換機中。

這背後的主要原因是因爲如果你像剛纔那樣使用它(和if語句),並且$parameters['sort']等於你在開關中定義的3以外的東西,那麼你將遇到問題。而如果定義了默認值,那麼在這些情況下,它總是知道默認的內容。

+0

這是什麼意思,如果我認爲它會和其他東西一樣有問題,那麼'switch()'裏面的內容就像我看到的那樣......它沒有邏輯,我從來沒有這樣的問題。如果'$ parameters ['sort'] ='ten_years_ago';',那麼就沒有問題了,只要使用該值,我將變量 – Alex

1

那麼,問題是,如果在任何情況下都找不到價值,您是否希望這樣做。 如果你不這樣做,那麼你可以跳過默認情況,但是如果有東西要做,即使沒有指定值,那麼就使用默認情況。
但我必須說,使用默認情況是很好的做法,至少記錄錯誤/未指定的用法或打印錯誤屏幕。

+0

好的,我明白了..感謝您分享您的意見 – Alex