PHP IF 和 Switch 语句中的奇怪情况

PHP strange situation in IF and Switch statment

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

它发生只是因为这一行:

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

两者将被视为相同。试试吧。

试试这个

<?php
$error = TRUE;

if($error === FALSE || $error === 'stringValue') {
 echo 'Inside IF';
} else {
 echo 'Inside ELSE';
}

switch($error){
case FALSE:
//case 'stringValue':
    echo 'Inside First';
    break;

default:
    echo 'Inside Default';
    break;
}

?>

你也可以在你的代码中做这件事 -

只需将$error ='TRUE';设为字符串,因为此时它是布尔值。

是针对类型的。 == 在类型转换后检查是否相等。但是如果你想检查相同的类型,你应该使用 === 。如果两个运算符的类型相同,则 return 为真。所以你可以使用 === 而不是 ==。
像这样-

$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

如前一个答案所述,== 运算符不匹配类型,而只匹配值,因此如果比较 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 里面 在 true

里面