PHP switch语句(endswitch)为替代语法提供Parse错误

时间:2015-02-11 15:48:35

标签: php

我使用以下代码获取Parse error: syntax error, unexpected '', expecting endswitch (T_ENDSWITCH) or case (T_CASE) or default (T_DEFAULT) in ...

myview.phtml

<?php switch ($oEx->getCode()): ?>

<?php default: ?>
Stuff

<?php endswitch; ?>

this is OK

<?php switch ($oEx->getCode()):

endswitch; ?>

为什么?解决方法是在结束标记之前添加a dummy-case as below,但我不明白为什么这应该是必要的。

<?php switch ($oEx->getCode()): case -9999: break; ?>

<?php default: ?>
Stuff

<?php endswitch; ?>

3 个答案:

答案 0 :(得分:9)

请参阅manual

  

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

<?php switch ($foo): ?>
    <?php case 1: ?>
    ...
<?php endswitch ?>
  

虽然这是有效的,因为switch语句之后的尾随换行被视为结束的一部分?&gt;因此在开关和外壳之间没有输出任何东西:

<?php switch ($foo): ?>
<?php case 1: ?>
    ...
<?php endswitch ?>

问题不在于结束PHP标记,而是空白。我想如果你修改了原始代码如下,它应该摆脱你的语法错误:

<?php switch ($oEx->getCode()): ?>
<?php default: ?>
Stuff
<?php endswitch; ?>

请注意,唯一的更改是删除switch语句与default案例之间的换行符。

答案 1 :(得分:-1)

switch之后,defaultcase

之间没有任何内容
<?php switch ($oEx->getCode()): ?>
//You can't have anything else here
<?php default: ?>
Stuff

<?php endswitch; ?>

所以你必须设置一个默认或一个只是嵌套的案例来切换而不需要换行或其他任何东西:

<?php switch ($oEx->getCode()): ?>
<?php default: ?>
Stuff

<?php endswitch; ?>

答案 2 :(得分:-1)

            <?php switch (1): 
                case 1:?>
                    <div>foo1</div>
            <?php break;?>
            <?php default:?>
                    <div>foo2</div>
        <?php endswitch; ?> 

我尝试了这段代码和他的作品