2016-08-12 74 views
2

取決於是否設置了2個變量($ skip和$ take),我想要做不同的事情。我有一個很大的if else語句,有沒有更有效的方法來寫這個?檢查是否設置了兩個變量?

if (isset($skip) && !isset($take)) { 
     //skip only 
    } elseif (!isset($skip) && isset($take)) { 
     //take only 
    } elseif (isset($skip) && isset($take)) { 
     //skip and take 
    } else { 
     //default 
    } 

編輯

還應當指出的是,這是在對增值經銷商將被設置爲空的方法來坐,如果沒有指定:

getAll($skip = null, $take = null) 
+0

我不這麼認爲,你有4個情況下,你需要4塊,你可以選擇'如果(isset($ A)){如果(isset($ B ){} else {}} else {if(isset($ b){} else {}}''''''''''''''''''這取決於哪些內容更具可讀性 – cske

回答

1

由於OP在評論中澄清說這是在一種方法中,並且$skip$take都是具有默認值的參數,但有人可能傾向於===高於isset。此外,還可以重新安排邏輯位:

function getAll($skip = null, $take = null) { 

    if ($skip !== null && $take !== null) { 
     // both 
    } elseif ($skip !== null) { 
     // skip only 
    } elseif ($take !== null) { 
     // take only 
    } else { 
     // none 
    } 
} 

===運營商強制使用類型安全的相等性檢查。

的方式爲參數的默認值工作,參數是總是保證是null,如果你不通過他們,所以平等的檢查是在這裏檢查它們的好方法。

+0

如果您不需要知道他們是否已將任何價值放在字段中?如果它是標誌性的,那麼就沒有必要這樣做,例如,一個包含'?take'的查詢字符串就足以暗示你想要執行take操作而不是寫''take = true' – Henders

+0

@Henders是的,但不使用'空'是新手常見的陷阱,所以我認爲它適合提及它,以便操作者能夠弄清楚它適合在這裏使用。 – Polygnome

+0

我的方法有getAll($ skip = null,$ take = null) – panthro

9

可以簡化有點邏輯:

if (isset($skip) && isset($take)) { 
    // skip and take 
} elseif (isset($skip)) { 
    // only skip 
} elseif (isset($take)) { 
    // only take 
} else { 
    // default 
} 
1

如果你不喜歡,如果其他

$switch = (int)isset($skip) + (int)isset($take)*2; 
switch($switch){ 
    case 0: 
    //default 
    break; 
    case 1: 
    //only skip 
    break; 
    case 2: 
    //only take 
    break; 
    case 3: 
    //skip and take 
    break; 
} 
+1

雖然這可能是「聰明的」,但它對於生產代碼來說可怕。不要這樣做。寫直截了當,易於理解的代碼。像這樣的事情,只是不必要的事情,讓其他人都可以閱讀。此外,它沒有正確解決更新的問題。 – Polygnome

+0

你說得對!剛剛發現與if else方法不同的方式....結果是不太可讀的解決方案 – Vanojx1

相關問題