PHP注入HTML中的switch语句

问题描述 投票:26回答:3
<? switch ($var): ?>
  <? case 1: ?>
    It's 1!
  <? break ?>
<? endswitch ?>

我想做类似的事情,换句话说,在PHP模板中使用switch语句。这可以使用if语句。上面的代码在PHP 5.3中生成Parse error: syntax error, unexpected T_INLINE_HTML, expecting T_ENDSWITCH or T_CASE or T_DEFAULTPHP docs表明这应该是可能的。

有人可以确认这不起作用,或者说,告诉我我做错了什么?

谢谢。

php templates switch-statement
3个回答
53
投票

我在php doc中读到你的例子不应该工作。

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

试试这个:

<div>
<?php switch($variable): 
case 1: ?>
    <div>
    Newspage
    </div>
<?php break; ?>
<?php case 2: ?>
    </div>
    Forum
    <div>
<?php break; ?>
<?php endswitch; ?>
</div>

http://php.net/control-structures.alternative-syntax


16
投票

你有

?>\n\n<?

在你的开关变成之后

switch($var):
echo "\n\t";
case 1:

将您的脚本视为PHP,其中包含HTML,而不是装饰HTML。 PHP二进制文件首先获取文件。

您可能希望使用像HEREDOC这样的东西来回应未转义的HTML。


5
投票

我使用这种友好的格式,测试和工作:

<? switch($var) : case 1 : ?>

  <div>One</div>

<? break; case 2 : ?>

  <div>Two</div>

<? break; case 3 : ?>

  <div>Three</div>

<? break; endswitch; ?>

0
投票

使用带有在php 5.6上运行的新样式短标签的开关或foreach语句时,我遇到了类似的问题。

就我而言:改变

<?=

  switch ($number_of_columns) {
    case "1":
        echo '<div class="col-sm-12 col-md-12" >';
        break;
    case "2":
        echo '<div class="col-sm-12 col-md-6" >';
        break;
    case "4":
        echo '<div class="col-sm-6 col-md-3" >';
        break;
    default:
        echo '<div class="col-sm-6 col-md-4" >';
    }
?>

 <?php 
      switch ($number_of_columns) {
        case "1":
            echo '<div class="col-sm-12 col-md-12" >';
            break;
        case "2":
            echo '<div class="col-sm-12 col-md-6" >';
            break;
        case "4":
            echo '<div class="col-sm-6 col-md-3" >';
            break;
        default:
            echo '<div class="col-sm-6 col-md-4" >';
        }
    ?>

没有语法错误,即语法错误,意外'切换'(T_SWITCH)

© www.soinside.com 2019 - 2024. All rights reserved.