我最近从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;
。
为什么它会以这种方式做出不同反应?
我最好猜测这与类型转换有关。
答案 0 :(得分:0)
我从来没有解决过这个问题。 但是在服务器上进行定期更新后,它有时会解决。
这可能是php中的一个问题,因为我没有更新页面,但现在已解决。
(现在运行PHP 7.2.24) 因此,如果遇到此问题,只需更新您的php版本。