额外新行时,php switch语句替代语法解析错误

时间:2014-05-11 21:27:37

标签: php

按预期工作,没有解析错误

<?php switch(rand(0,2)): ?>
<?php case 0: ?>
<?php break;?>

<?php case 1: ?>
<?php break;?>

<?php case 2: ?>
<?php break;?>

<?php endswitch;?>
</div>

由于切换后的新行而产生p​​arese错误...这是非常奇怪的行为。使用PHP 5.4.24。

  

解析错误:在第18行的/Library/WebServer/Documents/phppos/index.php中解析错误,期待"endswitch (T_ENDSWITCH)"' or“case(T_CASE)”'或``default(T_DEFAULT)“'

<?php switch(rand(0,2)): ?>

<?php case 0: ?>
<?php break;?>

<?php case 1: ?>
<?php break;?>

<?php case 2: ?>
<?php break;?>

<?php endswitch;?>

2 个答案:

答案 0 :(得分:3)

<?php...?>之外的所有内容 - 包括空格 - 都会像echo一样输出,所以这个:

?>

<?php 

相当于:

 echo '
 ';

由于这样的回声在该位置无效 - 在交换机中但在任何情况下都不是默认块 - 因此通过以这种方式关闭PHP块来暗示它是无效的。

解决方案是不要用?&gt;关闭PHP块。除了你真正想要输出的地方。

答案 1 :(得分:0)

除非您没有向我们展示完整代码,否则使用内联PHP的此模板代码将100%无效:

<?php switch(rand(0,2)): ?>

<?php case 0: ?>
<?php break;?>

<?php case 1: ?>
<?php break;?>

<?php case 2: ?>
<?php break;?>

<?php endswitch;?>

为什么不这样做,最后添加一个default:来捕捉你可能找不到的案例:

switch(rand(0,2)) {
  case 0:
    break;
  case 1:
    break;
  case 2:
    break;
  default:
}