PHP5 到 PHP7 if 在 switch case 中测试差异

PHP5 to PHP7 if test difference in switch case

我最近从 PHP5 升级到 PHP7。 这给了我一个错误。提炼出问题后,我得以解决。但是我还是觉得这是个奇怪的问题。

给定以下代码:

<?php

$r = "R";
$a = false;

switch ($r) {
  case "R":
  default:
    // Test 1
    if($a){
      echo("error;");
    }else{
      echo("working;");
    }
    // Test 2
    if($a !== false){
      echo("error;");
    }else{
      echo("working;");
    }
    break;
}
?>

这段代码的输出是: PHP 5.5.9:

working;working;

PHP 7.0.13:

error;working;

为什么会有这种差异?

然而,当移除 'Test 1' 附近的 switch case 块时,这会导致 working

$r 的初始声明更改为其他内容,然后 'R' 也会导致 working;working;。这意味着根据我们是从 'case' 还是从 'default' 开始,结果是不同的。

在 'Test 1' 前面添加行 var_dump($a);(在 switch case 内)会导致 bool(false) working;working;

奇怪的观察: 当第一次 运行 代码时,它有时会导致:working;working; 并按 F5 它会再次导致 error;working;

为什么会有这样不同的反应?

我猜这与类型转换有关。

我从来没有解决过这个问题。 但是在服务器上定期更新后,它在某个时候得到了解决。

可能是php某处的问题,因为我没有更新页面,但现在已经解决了。

( 运行 PHP 7.2.24 现在 ) 因此,如果您遇到此问题,请更新您的 php 版本。