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