【问题标题】:Switch statement in PHP injected HTMLPHP注入HTML中的switch语句
【发布时间】:2011-08-31 02:13:43
【问题描述】:
<? 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 表明这应该是可能的。

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

谢谢。

【问题讨论】:

  • 您应该使用&lt;?php 而不仅仅是&lt;? - 短版本已被弃用。
  • 您在文档中的什么地方看到了这个?我访问了您提供的链接,但找不到任何有关支持将内联 HTML 与 switch 语句混合的信息。
  • (短标签)没有被弃用,只是因为与某些服务器配置不兼容而被避免使用。
  • 正如@Steve 所说,它们没有被弃用。而且使用起来好多了。 @AJ 我指的是关于 switch(): 的部分,但不,它没有说任何关于混合的内容。
  • 告诉您的 IDE、系统管理员和 SO 新手。语言越清晰,使用的越多。英语是一个很好的例证:简单而高效,一分钟内就变成了国际语言。

标签: php templates switch-statement


【解决方案1】:

我在 php 文档中读到您的示例不应该工作。

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

【讨论】:

  • 谢谢! (对于其他人,代码来自this comment
【解决方案2】:

你有

?>\n\n<?

你的开关变成了

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

将您的脚本想象成包含 HTML 的 PHP,而不是修饰的 HTML。 PHP 二进制文件首先获取文件。

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

【讨论】:

    【解决方案3】:

    我使用这种“友好格式”。经过测试和工作:

    <? 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; ?>
    

    【讨论】:

    【解决方案4】:

    在 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" >';
            }
        ?>
    

    导致没有语法错误,即语法错误,意外的“开关”(T_SWITCH)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-20
      相关资源
      最近更新 更多