我最近已从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.2.24)因此,如果您有此问题,只需更新您的php版本。