[PHP5到PHP7,如果开关情况下的测试差异

问题描述 投票:1回答:1

我最近已从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”周围的开关盒时,结果为working

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

[在'测试1'的前面(在开关盒内)添加var_dump($a);行时,结果为bool(false) working;working;

奇怪的观察:首次运行代码时,有时会显示:working;working;,然后按F5会再次显示error;working;

为什么这样反应不同?

我最大的猜测是这与类型转换有关。

php php-7 php-5.5
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.