if($country == 224 || $country == 223 || $country == 39 && $zip == '' ){
$_SESSION['sess_msg'] = "Please enter a Valid zipcode";
header("location: $SITE_PATH?p=account.profile.name");
exit;
}
variable value -------- ----- $country 224 $zip 11111
我知道$zip
不是空的,但代码执行就像它一样。我甚至在调试语句中将其打印到浏览器以验证它是否具有值。
是什么导致我的程序表现得好像$zip
没有值?
答案 0 :(得分:26)
&&
运算符的precedence运算符高于||
运算符。所以你的表达式等于:
$country == 224 || $country == 223 || ($country == 39 && $zip == '')
解决方案:
($country == 224 || $country == 223 || $country == 39) && $zip == ''
答案 1 :(得分:15)
您是否尝试过使用括号命令操作?
($country == 22 || $country == 223 || $country == 39) && ($zip == '')
答案 2 :(得分:9)
问题是order in which PHP checks your boolean operators。首先它看到一个条件,然后是一个OR,它认为:哎呀,是的!条件得到满足。我为什么要费心阅读并执行剩下的这些东西?
实际上,这是一个功能。想想这个星座:
if (something_probable () OR something_very_expensive_to_compute ())
如果第一个已经通过测试,那么很好的PHP不评估第二个。
尝试使用括号:
if (($country == 224 || $country == 223 || $country == 39) && $zip == '' ){
干杯,
答案 3 :(得分:5)
&安培;&安培;运算符优先级高于|| ,所以你实际上在说:
if($country == 224 || $country == 223 || ($country == 39 && $zip == '' ))
答案 4 :(得分:5)
我喜欢第一个答案,但无论如何都不会更具可读性:
<?php
$need_zip_code = array(224, 222, 332, 222/* etc....*/);
if (in_array($country, $need_zip_code) && $zip === '') {
// do your stuff....
}
?>
答案 5 :(得分:0)
如果将其更改为此怎么办?
if($country === 224 || $country === 223 || $country === 39 && $zip === '' ){
$_SESSION['sess_msg'] = "Please enter a Valid zipcode";
header("location: $SITE_PATH?p=account.profile.name");
exit;
}
我很好奇如果变量的类型导致问题,===
会比较值和变量的类型。< / p>
答案 6 :(得分:0)
是的......但他们是否设置了正确的值之一?国家是224或223或39而zip是一个空白字符串?我想强调,zip是一个“空白”字符串==''。