Подтвердить что ты не робот

Оператор switch в PHP ввел HTML

<? switch ($var): ?>
  <? case 1: ?>
    It 1!
  <? break ?>
<? endswitch ?>

Я хочу сделать что-то подобное, другими словами, использовать оператор switch в шаблонах PHP. Это возможно с помощью оператора if. Вышеприведенный код генерирует Parse error: syntax error, unexpected T_INLINE_HTML, expecting T_ENDSWITCH or T_CASE or T_DEFAULT в PHP 5.3. Документы PHP предполагают, что это должно быть возможно.

Может кто-нибудь подтвердить, что это не работает, или, вернее, сказать мне, что я делаю неправильно?

Спасибо.

4b9b3361

Ответ 1

Я прочитал в 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

Ответ 2

У вас есть

?>\n\n<?

после вашего переключателя, который становится

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

Подумайте о том, что ваш script как PHP с HTML в нем, а не украшен HTML. Сначала двоичный файл PHP получает файл.

Вам может понравиться использовать что-то вроде HEREDOC, чтобы вывести неэкранированный HTML.

Ответ 3

Я использую это удобное форматирование, проверено и работает:

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

  <div>One</div>

<? break; case 2 : ?>

  <div>Two</div>

<? break; case 3 : ?>

  <div>Three</div>

<? break; endswitch; ?>

Ответ 4

У меня была похожая проблема при использовании оператора 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)