在PHP中使用Switch语句注入HTML

29
<? 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_DEFAULT 的错误。根据PHP文档,应该是可以实现这个功能的。

有人可以确认一下这行不通,或者告诉我哪里错了吗?

谢谢。


2
你应该使用 <?php 而不是仅仅使用 <? - 短版本已经被弃用。 - Spudley
1
你在文档中看到这个在哪里了?我访问了你提供的链接,但是没有找到任何关于支持将内联HTML与switch语句混合使用的内容。 - AJ.
2
<?(短标签)并未被弃用,只是因为与某些服务器配置不兼容而被避免使用。 - Steve
正如@Steve所说,它们并没有被弃用。而且使用起来更加方便。@AJ我指的是关于switch()部分的内容,但是它并没有提到混合使用的事情。 - Markus Hedlund
告诉你的IDE、系统管理员和SO上的新手们。语言越清晰,使用率就越高。英语是一个很好的例子:简单而高效,在一分钟内成为国际语言。 - Yonn Trimoreau
4个回答

60

我在 PHP 文档中读到,你的例子应该无法正常工作。

在 switch 语句和第一个 case 之间有任何输出(包括空格),都会导致语法错误。例如,以下代码是无效的:

请尝试改用以下代码:

<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


4
谢谢!(对于其他人,这段代码来自于这个评论 - Markus Hedlund

16

你有

?>\n\n<?

在您切换之后,它变成了

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

把你的脚本看作是带有HTML的PHP,而不是精美的HTML。PHP二进制文件先获取文件。

你可能想使用类似HEREDOC的东西来回显未转义的HTML。


9
我使用这种“友好的格式”。 经过测试,它可以正常工作:
<? switch($var) : case 1 : ?>

  <p>One</p>

<? break; case 2 : ?>

  <p>Two</p>

<? break; case 3 : ?>

  <p>Three</p>

<? break; default : ?>

  <p>Default Value</p>

<? endswitch; ?>

你的解决方案完美地解决了我的问题 - https://stackoverflow.com/questions/64427621/why-is-my-div-firstpage-displaying-on-my-div-lastpage-when-the-div-firstpage - BigUncleE

-2

当我在使用新风格短标签运行在php 5.6上的switch或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" >';
        }
    ?>

没有语法错误,即语法错误,意外的'switch'(T_SWITCH)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接