我无法理解为什么以下不会导致 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/