>我最近遇到了 switch 语句语法错误,http://php.net/manual/en/control-structures.alternative-syntax.php
我的IDE(phpstorm)检测到错误,但它没有提供任何有用的上下文进行更正。 当将文件作为模板包含时,代码确实产生了致命错误。
手册页的警告:
警告 switch 语句和第一种情况之间的任何输出(包括空格)都将导致语法错误。例如,这是无效的:
<?php switch ($foo): ?>
<?php case 1: ?>
...
<?php endswitch ?>
而这是有效的,因为 switch 语句后面的尾随换行符被认为是结束 ?> 的一部分,因此在开关和大小写之间没有任何输出:
<?php switch ($foo): ?>
<?php case 1: ?>
...
<?php endswitch ?>
手册页没有提供任何解释。 页面上的一些用户评论也没有解释任何事情;他们只是重申不允许使用空格。
为什么这是语法错误?
就是这样。
这是一个语法错误,原因与此相同:
<?php
$foo = 1;
switch ($foo) {
?>
This can't be here.
<?php
case 1:
echo "I'm one";
break;
case 2:
echo "I'm two";
break;
}
这导致:
[2016 年 1 月 27 日 22:21:08 欧洲/柏林] PHP 解析错误:语法错误,意外的"这不能在这里",在第 7 行的/path/file 中需要大小写 (T_CASE) 或默认值 (T_DEFAULT) 或"}"
唯一可以跟随switch
的是 case
.这就是语言的工作方式。
的特定于空格的限制是它是替代语法的原因之一:它会导致丑陋的格式,并且在人们通常期望看到的地方缺少缩进。