PHP和Switch中的PHP奇怪情况

时间:2016-01-07 09:35:50

标签: php if-statement switch-statement

我在使用PHP中的IFSwitch语句时遇到了一种非常奇怪的情况。任何人都可以解释为什么下面的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;
}

4 个答案:

答案 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内部真实