我继承了一段代码如下:
case 'apple':
default:
echo "Apple";
break;
case 'banana':
default:
echo "Banana";
break;
case 'cherry':
echo "Cherry";
break;
语法相当奇怪!
我实际上并没有意识到你可能有多个默认值。或者上面的代码甚至可以工作。无论如何,在检查语法的同时,看起来这个结构似乎会破坏PHP7(http://php.net/manual/en/control-structures.switch.php)
7.0.0 Multiple default cases will raise a E_COMPILE_ERROR error.
这是正确的,这是否意味着这段代码根本无法在PHP7上运行?
答案 0 :(得分:4)
在以前的版本中:
规范声称以下是语法错误,而PHP会 使用最后一个默认块执行它。
请参阅https://wiki.php.net/rfc/switch.default.multiple
从PHP 7开始,它将抛出编译错误。
定义多个默认值没有意义。
答案 1 :(得分:2)
你可以指定多个默认值,但它实际上从未工作过 - 只使用了最后一个,其余的被忽略了。
您发布的代码将在PHP 4 - 5中输出 Banana ,并在PHP 7中以编译错误结束:https://3v4l.org/JsocB
要在保持原始行为的同时修复代码,请删除除最后一个default
语句之外的所有语句。