为什么备用语法switch语句中的输出会导致语法错误

时间:2016-01-27 21:18:32

标签: php

我最近遇到了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也没有解释任何事情;他们只是重申,不允许空白。

为什么这是语法错误?

1 个答案:

答案 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。这就是语言的运作方式。

使用替代语法的空白特定限制是 替代语法的原因之一:它导致难看的格式化并且缺少缩进期待看到它。