Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的php if语句问题 可变值 -------- ----- 国家224美元 邮政编码11111元_Php_Conditional - Fatal编程技术网

奇怪的php if语句问题 可变值 -------- ----- 国家224美元 邮政编码11111元

奇怪的php if语句问题 可变值 -------- ----- 国家224美元 邮政编码11111元,php,conditional,Php,Conditional,我知道,$zip不是空的,但是代码执行起来就像是空的一样。我甚至在调试语句中将它打印到浏览器,以验证它是否有值 是什么导致我的程序在$zip没有值的情况下运行?如果将其更改为该值,它会做什么 variable value -------- ----- $country 224 $zip 11111 我很好奇,如果变量的类型导致了这里的问题,==将比较变量的值和类型。您是否尝试过使用括号来命令您的操作 if($country === 224 || $country ==

我知道,
$zip
不是空的,但是代码执行起来就像是空的一样。我甚至在调试语句中将它打印到浏览器,以验证它是否有值


是什么导致我的程序在
$zip
没有值的情况下运行?

如果将其更改为该值,它会做什么

variable value -------- ----- $country 224 $zip 11111
我很好奇,如果变量的类型导致了这里的问题,
==
将比较变量的值和类型。

您是否尝试过使用括号来命令您的操作

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;
}

是的。。。但它们是否设置为正确的值之一?国家是224或223或39,zip是空白字符串?我想强调的是,zip是一个“空白”字符串=='.

操作符的值高于
|
操作符的值。所以你的表达式等于:

($country == 22 || $country == 223 || $country == 39) && ($zip == '') 
解决方案:

$country == 224 || $country == 223 || ($country == 39 && $zip == '')

&&具有比| |更高的运算符频率,因此您实际上是在说:

($country == 224 || $country == 223 || $country == 39) && $zip == ''
问题是这个问题。首先它看到一个条件,然后是一个OR,它想:见鬼,是的!符合条件。我为什么要费心去阅读和执行这些东西呢

实际上,这是一个特性。想想这个星座:

if($country == 224 || $country == 223 || ($country == 39 && $zip == '' ))
如果第一个已经通过了测试,那么PHP最好不要评估第二个

尝试使用括号:

if (something_probable () OR something_very_expensive_to_compute ())

干杯,

我喜欢第一个答案,但无论如何也不会更具可读性:

if (($country == 224 || $country == 223 || $country == 39) && $zip == '' ){


谢谢,我从来都不知道这一点,这似乎是一件很好的事情!顺便说一句,这解决了我的问题不客气!别忘了接受任何答案(Gumbo和Gortok原则上给出了相同的答案。我不知道谁是第一个)。亲爱的drive by downvoter,你介意评论一下你的决定吗?我想补充一点:如果编译器或解释器记住操作符的优先级,程序员不应该依赖于此。如果一个同伴误解了优先顺序,就会引入难以维护的错误。我的建议是使用parentesis来解决任何模棱两可的问题,以便让你的同事对你第一眼看到的内容充满信心。
if (($country == 224 || $country == 223 || $country == 39) && $zip == '' ){
<?php

$need_zip_code = array(224, 222, 332, 222/* etc....*/);

if (in_array($country, $need_zip_code) &&  $zip === '') {
 // do your stuff....
}


?>