为什么alternate-syntax switch语句中的输出会导致语法错误

Set*_*tin 6 php

我最近遇到了http://php.net/manual/en/control-structures.alternative-syntax.php中描述的switch语句语法错误.

我的IDE(phpstorm)检测到错误,但它没有提供任何有用的纠正上下文.将文件作为模板包含时,代码肯定会产生致命错误.

手册页的警告:


警告 switch语句和第一种情况之间的任何输出(包括空格)都将导致语法错误.例如,这是无效的:

<?php switch ($foo): ?>
    <?php case 1: ?>
    ...
<?php endswitch ?>
Run Code Online (Sandbox Code Playgroud)

虽然这是有效的,因为switch语句之后的尾随换行符被视为结束的一部分?>因此在开关和case之间没有输出任何内容:

<?php switch ($foo): ?>
<?php case 1: ?>
    ...
<?php endswitch ?>
Run Code Online (Sandbox Code Playgroud)

手册页没有提供任何解释.页面上的一些用户评论也没有解释任何内容; 他们只是重申不允许有空格.

为什么这是语法错误?

eli*_*ide 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;
}
Run Code Online (Sandbox Code Playgroud)

这导致:

[2016年1月27日22:21:08欧洲/柏林] PHP解析错误:语法错误,意外'这不能在这里.',期待案例(T_CASE)或默认(T_DEFAULT)或'}'在/ path /文件在第7行

唯一可以遵循的switch是a case.这就是语言的运作方式.

与替代语法的具体空格限制是它的原因之一替代语法:它会导致难看的格式和压痕缺乏通常一个人会看到它.

  • 通常,`?>`和`<?php`之间的任何东西都像`echo`语句.这包括空格. (8认同)
  • @SethBattin完全正确.这基本上是同样的问题. (3认同)
  • 非空白的例子肯定会让它看起来不那么疯狂.是你的例子无异于`switch($ foo){echo'这不可能在这里.'; 案例:....`? (2认同)