PHP 7 - 多个默认值

时间:2016-09-20 10:13:54

标签: php php-7

我继承了一段代码如下:

        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上运行?

2 个答案:

答案 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语句之外的所有语句。