根据是否设置了两个变量($ 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
}
修改
还应该注意,如果没有指定,这将是一个将vars设置为null的方法:
getAll($skip = null, $take = null)
答案 0 :(得分:9)
您可以稍微简化一下逻辑:
if (isset($skip) && isset($take)) {
// skip and take
} elseif (isset($skip)) {
// only skip
} elseif (isset($take)) {
// only take
} else {
// default
}
答案 1 :(得分: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
,所以相等检查是一种检查的好方法他们在这里。
答案 2 :(得分: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;
}