Оператор 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 предполагают, что это должно быть возможно.
Может кто-нибудь подтвердить, что это не работает, или, вернее, сказать мне, что я делаю неправильно?
Спасибо.
Ответы
Ответ 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)