在PHP(或任何类似的语言)中,是否有更好的替代方法:
if(x >= 200 && x <= 299){
return 'ok';
}
我的目标是验证数字是否在2xx代码的范围内(对于HTTP请求)。 我不喜欢double-if子句,因为我必须定义范围的结尾,并且由于某种原因,在进行各种自动验证时这是不实际的。
答案 0 :(得分:9)
在PHP(或任何类似的语言)中,是否有更好的替代...
在我看来,没有。
您的代码:
if (x >= 200 && x <= 299) {
return 'ok';
}
非常易读,可以清楚地定义要检查的内容。
答案 1 :(得分:6)
如果你想要一个声明,你肯定会在三个月后忘记你的意思:
if(2 == (int)floor(x / 100)) ...
如果没有别的,为了便于阅读,请将其包装在描述它的函数中:
function isHttpSuccess(status) {
return 2 == (int)floor(x / 100);
}
答案 2 :(得分:5)
如果你有一个功能,你可以使用返回'技巧':
function getStatus(x) {
if(x < 200) return 'status 1xx';
if(x < 300) return 'status 2xx'; // will only get executed if x >= 200 as well
// otherwise already returned '1xx'
...
}
答案 3 :(得分:1)
当你反复重复一项任务,并希望重用代码时,你应该编写一个新函数。这些示例假设您要使用>=
和<=
运算符,但通常我会使用>=
和<
来包含最小值并排除最大值。
PHP抽象:
function between( $val, $min, $max )
{
return $val >= $min && $val <= $max;
}
JavaScript抽象:
if ( !Number.prototype.between )
{
Number.prototype.between = function(min,max){
return this >= min && this <= max;
};
}
对于您的HTTP范围问题,我将使用包含底部的表单:
if ( between( $val, 200, 300 ) )...
当然,改变参数的顺序是有意义的,因此声明是:
between( 200, $val, 300 );
但实际上这取决于你。
进一步抽象的例子:
function between( $val, $min, $max, $mode = null )
{
switch ( $mode )
{
case INCLUSIVE:
return $val >= $min && $val <= $max;
case EXCLUSIVE:
return $val > $min && $val < $max;
case TOP_INCLUSIVE:
return $val > $min && $val <= $max;
case BOTTOM_INCLUSIVE:
default:
return $val >= $min && $val < $max;
}
}
答案 4 :(得分:1)
return in_array($code, range(200, 300));
答案 5 :(得分:0)
您可以编写自己的功能,以便更轻松:
function inRange(val,lower,upper) {
return val >= lower && val <= upper;
}
然后这样称呼:
if(inRange(x,200,299)) {
//execute code
} else {
//other code
}
答案 6 :(得分:0)
大多数语言都没有内置的速记。但是编写自己的明确的实用功能并没有错,例如:
function inRange( $val, $low, $high )
{
return ($val >= $low) && ($val <= $high);
}
然后您将其用作:
if (inRange(x, 200, 299))
{
return "ok";
}
您的代码很容易或未来的维护者可以获得您在此处所做的事情的要点 - 可以说比使用原始的'double-if'更为重要。
答案 7 :(得分:0)
在JavaScript中:
if ([199,299,x].sort().indexOf(x) == 1)
答案 8 :(得分:0)
为了您的目的,您不需要等于运算符,所有响应都是整数。
if(x>199 && x<300)
就像生活一样简单。