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 版本。
我最近从 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 版本。