2016-08-12 55 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

相关问题