Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么备用语法开关语句中的输出会导致语法错误_Php - Fatal编程技术网

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

Php 为什么备用语法开关语句中的输出会导致语法错误,php,Php,我最近遇到了在中描述的switch语句语法错误 我的IDE(phpstorm)检测到了错误,但它没有提供任何有用的上下文进行更正。当将文件作为模板包含时,代码确实产生了致命错误 手册页面的警告: 警告switch语句和第一种情况之间的任何输出(包括空格)都将导致语法错误。例如,这是无效的: ... 然而,这是有效的,因为switch语句后的尾随换行符被视为closing?>的一部分,因此switch和case之间没有任何输出: ... 手册页没有提供任何解释。有些用户也不解释什么;他

我最近遇到了在中描述的switch语句语法错误

我的IDE(phpstorm)检测到了错误,但它没有提供任何有用的上下文进行更正。当将文件作为模板包含时,代码确实产生了致命错误

手册页面的警告:


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


...
然而,这是有效的,因为switch语句后的尾随换行符被视为closing?>的一部分,因此switch和case之间没有任何输出:


...

手册页没有提供任何解释。有些用户也不解释什么;他们只是重申不允许空白

为什么这是一个语法错误?

就是这样

这是一个语法错误,原因与此相同:

<?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;
}

这不可能在这里。

至少在我看来,这样的问题听起来像是“为什么
==
用于比较”,答案只是“因为语法是这样定义的”……我想这是真的,但是使用比较运算符的原因是语言需要一个。这种语法质量的原因是什么?简短的回答是因为它是一个语法错误。。但是long-anwser太长了,前提是自动机理论。非空白的例子当然让它看起来不那么疯狂。您的示例是否等同于
开关($foo){echo'这不可能在这里。;case:…
?@SethBattin完全一样。这基本上是相同的问题。足够公平。感谢您的回答。一般来说,
?>

<?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;
}