我在使用PHP中的IF
和Switch
语句时遇到了一种非常奇怪的情况。任何人都可以解释为什么下面的IF
条件成立并且没有执行ELSE
块。 Switch
语句的情况也是如此,它没有执行default
块。
感谢您的时间:)
$error = TRUE;
if ($error == FALSE OR $error == 'stringValue') {
echo 'Inside IF';
} else {
echo 'Inside ELSE';
}
switch($error){
case FALSE:
case 'stringValue':
echo 'Inside First';
break;
default:
echo 'Inside Default';
break;
}
答案 0 :(得分:1)
这只是因为这一行:
if ($error == FALSE OR $error == 'stringValue') {
// your stuff
}
在这里,您将$ error定义为true并使用OR运算符。
$error == 'stringValue'
也意味着事情会成真。
一个基本示例:
$error = true;
if ($error == "somthing") {
echo 'Inside IF';
} else {
echo 'Inside ELSE';
}
它将始终打印“Inside IF”,但为什么?只看这个例子:
if (true == "somthing") {
echo 'Inside IF';
} else {
echo 'Inside ELSE';
}
两者都将被视为相同。试试吧。
答案 1 :(得分:1)
试试这个
#myId {
position: relative;
// etc. etc.
}
您也可以在代码中执行此操作 -
只需将 $ error =' TRUE'; 作为字符串,因为此时它是布尔值。
答案 2 :(得分:1)
这是类型。类型杂耍后==检查相等。但是如果你想检查相同的类型,你应该使用===。如果两个运算符是同一类型,则返回true。所以你可以使用===而不是==。
这样做 -
$error = TRUE;
if ($error === FALSE OR $error === 'stringValue') {
echo 'Inside IF';
} else {
echo 'Inside ELSE';
}
显示内部ELSE。
有关更多信息,请检查 -
http://php.net/manual/en/language.operators.comparison.php
答案 3 :(得分:0)
如前面的答案中所述,==运算符不匹配类型,而只匹配值,因此如果比较具有不同类型的2个值,则PHP尝试将其中一个变量转换为另一个变量的类型。
同样的事情适用于使用开关。我测试此选项以将$ error转换为字符串类型。
$error = TRUE;
if ($error == FALSE OR strval($error) == 'stringValue') {
echo 'Inside IF;
} else {
echo 'Inside ELSE';
}
switch(strval($error)){
case FALSE:
case 'stringValue':
echo 'Inside First';
break;
case TRUE:
echo 'Inside true'; break;
default:
echo 'Inside Default';
break;
}
输出 在ELSE内部真实