PHP 允许在 switch 语句中使用无效代码

标签 php switch-statement

我无法理解为什么以下不会导致 5.3.3 中的编译器错误(在我的同事 5.2.5 上正确错误):

<?php
    echo "starting\n";

    switch(1) {
        case 2:
            echo "two\n";
            break;
        defalut:        // note the misspelling
            echo "deflaut\n";
    }

    echo "ending\n";

它没有给我编译器错误(甚至是警告),而是给出了这个:

starting
ending

但是,如果我在 if 语句中使用它,它会给出我期望的结果:

<?php
    if (1 == deflaut)
        echo "deflaut2\n";

给出:

PHP Notice:  Use of undefined constant deflaut - assumed 'deflaut' in ...

这是为什么?有没有我可以禁用的设置来告诉它对这类事情严格?

最佳答案

它可能将其解释为另一个标签(这是有道理的,因为从技术上讲 default 标签,而 case 可能是也被解释为一种特殊类型的标签),可以与 goto 一起使用。尝试 goto 并找出答案。我愿意,但我没有 PHP 5.3.3,抱歉。

关于PHP 允许在 switch 语句中使用无效代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6630443/

相关文章:

php - 将多个具有相同名称的输入插入到一个数组 [行] 中(以 "^"分隔)

c - C 中的 switch 语句会清空 x86 管道吗?

关于比较的 R switch 语句

没有声明和中断的情况

python - 字典或 If 语句,Jython

在 SWITCH 语句中的 DEFAULT 之后,CASE 中的 c++ 变量初始化

javascript - 使用 JQuery AJAX 将值传递给 PHP 不起作用,数组困惑

javascript - 如何使用AJAX从php获取变量

php - 如何使用 PHP 将多维数组存储到 mysql 中

php - "current directory"符号不起作用