PHP5到PHP7如果在switch情况下测试差异

时间:2017-01-30 23:37:09

标签: php php-7 php-5.5

我最近从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;

为什么会出现这种差异?

然而,当在测试1&#39;周围移除开关盒块时,这会导致working

$r的初始声明更改为其他内容然后&#39; R&#39;也导致working;working;。这意味着取决于我们是否从“案例”开始。或者来自&#39;默认&#39;结果不同。

在&#39;测试1&#39;前面添加行var_dump($a);时(在开关案例内)它会产生bool(false) working;working;

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

为什么它会以这种方式做出不同反应?

我最好猜测这与类型转换有关。

1 个答案:

答案 0 :(得分:0)

我从来没有解决过这个问题。 但是在服务器上进行定期更新后,它有时会解决。

这可能是php中的一个问题,因为我没有更新页面,但现在已解决。

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