PHP 7 - 多重默认值

3

我继承了一段类似于这样的代码:

        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
你只需要一个默认值。这就是为什么它被称为默认值...对吧?那段代码太错误了。 - Gogol
1
@Gogol 是的!完全正确。 - Snowcrash
https://3v4l.org/DcgCW - danopz
2
@PaulCrovella 确实 - 把这个记录在 SO 上很方便。 - Snowcrash
1
我同意,这是个好问题。 - Darragh Enright
显示剩余6条评论
2个回答

5

在之前的版本中:

规范声称以下内容是语法错误,而PHP将执行它,并采用最后一个默认块。

请参阅https://wiki.php.net/rfc/switch.default.multiple

从PHP 7开始,它将抛出编译错误。

定义多个默认值没有意义。


2

你可以指定多个默认值,但它实际上从未起作用 - 只有最后一个会被使用,其余的会被忽略。

你发布的代码将在PHP 4-5中输出 "Banana",并在PHP 7中出现编译错误:https://3v4l.org/JsocB

为了修复该代码并保持原始行为,请删除除最后一个default语句之外的所有语句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接