我希望最后一个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.';
}
答案 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')