【问题标题】:If expression evaluates to false and skips over elseif to elseif 表达式计算结果为 false 并跳过 elseif 到 else
【发布时间】:2013-06-26 18:48:47
【问题描述】:

似乎由于某种原因,当 if 的表达式返回 false 时,它​​会跳过我的 elseif 并直接转到 else。我试图找出一些奇怪的东西,但我的基本测试仍然失败。是什么赋予了?我想补充一点,我正在使用内置的 php 5.4 进行调试,如果这很重要,还可以使用 phpstorm。

$value = 2;

if ($value == 0) {
    xdebug_var_dump($value);
} elseif ($value == 1) {
    xdebug_var_dump($value);
} else {
    xdebug_var_dump($value);
}

【问题讨论】:

  • 是什么让你认为它跳过了elseif
  • 使用 phpstorm 您可以在使用 xdebug 并进入每一行时看到它。 if 语句中必须有一些东西检查以下 elseif 语句以查看它们是否返回 true,但是在单步执行时,它会跨过 elseif,就好像它甚至没有查看它一样

标签: php if-statement phpstorm


【解决方案1】:

这是预期的。你的 else if 条件评估为 False ,因此它跳到 else 块。

这个例子应该说明它:

<?php
$value = 2;

if($value == 0){
    echo "if block was executed";
} 
elseif($value == 1){ // 2 !== 1
    echo "elseif block 1 was executed";
} 
elseif($value == 2){
    echo "elseif block 2 was executed";
}
else{
    echo "else block was executed";
}
?>

这个输出:

elseif block 2 was executed

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    问题在于您的else if 也是错误的(因为 1 != 2),所以您的代码会跳到else

    $value = 1;
    
    if ($value == 0) {
        xdebug_var_dump($value);
    } else if ($value == 1) {
        // This should run:
        xdebug_var_dump($value);
    } else {
        xdebug_var_dump($value);
    }
    

    【讨论】:

    • 那么一定是phpstorm中的一个bug。它实际上并没有显示它评估 elseif 表达式,但如果它是真的,它将跳转到该部分。这很烦人,因为它让我觉得它根本没有评估它。
    猜你喜欢
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2021-01-03
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多