我最近遇到了http://php.net/manual/en/control-structures.alternative-syntax.php
中描述的switch语句语法错误我的IDE(phpstorm)检测到错误,但它没有提供任何有用的纠正上下文。将文件作为模板包含时,代码肯定会产生致命错误。
手册页的警告:
警告 switch语句和第一种情况之间的任何输出(包括空格)都会导致语法错误。例如,这是无效的:
<?php switch ($foo): ?>
<?php case 1: ?>
...
<?php endswitch ?>
虽然这是有效的,因为switch语句之后的尾随换行被视为结束的一部分?&gt;因此在开关和外壳之间没有输出任何东西:
<?php switch ($foo): ?>
<?php case 1: ?>
...
<?php endswitch ?>
手册页无法解释。有些用户comments on the page也没有解释任何事情;他们只是重申,不允许空白。
为什么这是语法错误?
答案 0 :(得分:12)
只是。
这是一个语法错误,原因与此相同:
<?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解析错误:语法错误,意外'这不能在这里。',期待案例(T_CASE)或默认(T_DEFAULT)或'}'在第7行的/ path /文件中
唯一能跟随switch
的是case
。这就是语言的运作方式。
使用替代语法的空白特定限制是 替代语法的原因之一:它导致难看的格式化并且缺少缩进期待看到它。