If语句不能按预期工作

时间:2014-04-17 20:07:59

标签: php variables if-statement

我希望最后一个if语句为真,但它会回声:$ var是type,max或min。

有人可以解释究竟发生了什么吗?因为我不明白。

$var = 'required';

if($var == 'unique') {
    echo '$var is unique.';
} else if($var == ('type' || 'max' || 'min')) {
    echo '$var is type, max or min.';
} else if($var == 'required') {
    echo '$var is required.';
}

6 个答案:

答案 0 :(得分:11)

您无法像这样使用||。正确的方法是:

if ($var == 'type' || $var == 'max' || $var == 'min')

如果要检查更多参数,请考虑使用in_array代替,它会使检查更简洁:

if (in_array($var, ['type', 'max', 'min', 'some', 'other', 'string', 'to', 'check']))

答案 1 :(得分:2)

那是因为('type' || 'max' || 'min')是一个计算结果为布尔true的表达式,这意味着你要求PHP评估($var == true)。由于它不为空或为null,因此表达式为true。将其更改为:

if ($var == 'type' || $var == 'max' || $var == 'min')

答案 2 :(得分:2)

这里发生的事情是php首先评估('type' || 'max' || 'min')。这个评价是真的。之后,'required'true的比较正在评估为真。发生这种情况是因为在将布尔值与字符串进行比较时,除非字符串为0,否则将字符串转换为true。参考此比较结果表可能会有用http://us3.php.net/manual/en/types.comparisons.php

你想:

$var = 'required';

if($var == 'unique') {
    echo '$var is unique.';
} else if($var == 'type' || $var == 'max' || $var == 'min') {
    echo '$var is type, max or min.';
} else if($var == 'required') {
    echo '$var is required.';
}

我甚至建议做===以确保它是一个绝对字符串比较,以防$ var作为布尔或其他类型传入。

$var = 'required';

if($var === 'unique') {
    echo '$var is unique.';
} else if($var === 'type' || $var === 'max' || $var === 'min') {
    echo '$var is type, max or min.';
} else if($var === 'required') {
    echo '$var is required.';
}

答案 3 :(得分:1)

($var == ('type' || 'max' || 'min'))

你不能这样写。你应该写它

($var == 'type' || $var ==  'max' || $var == 'min'))

答案 4 :(得分:1)

试试这个:

$var = 'required';

if($var == 'unique') {
    echo '$var is unique.';
} else if($var == 'type' || $var == 'max' || $var == 'min')) {
    echo '$var is type, max or min.';
} else if($var == 'required') {
    echo '$var is required.';
}

答案 5 :(得分:0)

正确的方法是:

if($var=='type'||$var=='max'||$var=='min')