PHP 注入 HTML 中的 switch 语句


Switch statement in PHP injected HTML

<? 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文档建议这应该是可能的。

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

谢谢。

我在 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

你有

?>'n'n<?

在您的开关之后,它变成了

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

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

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

我使用这种"友好的格式"。经过测试并工作:

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

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

就我而言:更改

<?=
  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)