【问题标题】:PHP strange situation in IF and Switch statmentIF和Switch语句中的PHP奇怪情况
【发布时间】:2016-01-07 09:35:49
【问题描述】:

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

【问题讨论】:

  • true == 'string' 结果为truetrue === 'string' 结果为false
  • 由于 true == "somthing" 并且特别适用于 OR 运算符。
  • @devpro 谢谢 :)
  • 永远欢迎 (Khush amded)..

标签: php if-statement switch-statement


【解决方案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';
}

两者都将被视为相同。试试看。

【讨论】:

  • 因此您可以在 if else 语句中与=== 进行比较,但是使用 switch case 也可以吗?还是 switch case 总是与== 比较?
  • @KhorneHoly 为什么要在 switch 中使用布尔值?根据文档没有:Note that switch/case does loose comparision.
  • @khorneHoly 谢谢朋友 :)
  • @daan 也谢谢你:)
  • @Daan 我只是想理解这一点。我已经问过自己几次 switch 和 if/else 之间的最大区别是什么,这是一个很大的区别,这就是我问的原因
【解决方案2】:

用于类型。 == 在类型杂耍之后检查相等。但是如果你想检查相同的类型,你应该使用 === 。如果两个运算符的类型相同,则返回 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】:

    试试这个

    <?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';设为字符串,因为此时它是布尔值。

    【讨论】:

    • 不要忘记通过投票来欣赏。
    【解决方案4】:

    如上一个答案所述,== 运算符不匹配类型,而只匹配值,因此如果比较具有不同类型的 2 个值,PHP 会尝试将其中一个变量转换为另一个变量的类型。

    同样的事情也适用于使用 switch。我测试此选项以将 $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

    【讨论】:

      猜你喜欢
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2016-03-02
      相关资源
      最近更新 更多