Хранить встроенный HTML в переменной в PHP

#php #html #variables

#php #HTML #переменные

Вопрос:

Мне было интересно, в основном потому, что я думаю, что где-то видел это раньше, возможно ли хранить HTML внутри переменной, что-то вроде следующего (я знаю, что это не имеет смысла, это просто для уточнения моего вопроса):

 <? $var = ' ?>
text goes here
<? '; ?>
  

И тогда $var было бы равно text goes here

Комментарии:

1. По возможности вам следует избегать этого. Встраивайте PHP в HTML, а не наоборот.

2. «Внедряйте PHP в HTML, а не наоборот». Или как?

3. @Felix Kling: почему вы рекомендуете встраивать PHP в HTML, а не наоборот?

4. @Nightwolf: Поскольку создание бесконечных HTML-строк подвержено ошибкам (например, экранирование кавычек). Скорее всего, вы также потеряете подсветку синтаксиса, если используете IDE. Конечно, с heredoc это может быть не так уж плохо, но едва ли есть причина не писать HTML «обычным» способом и просто echo данные там, где они должны быть. Это лучшее разделение логики и представления.

5. @Felix Kling, я хочу использовать это для шаблонов новостных рассылок, для которых требуется конфигурация php для моей системы, а также шаблон HTML. Я бы хотел, чтобы эти два были включены в один и тот же php-файл без потери цвета синтаксиса HTML. Я подумал, что это отличное решение.

Ответ №1:

Вы могли бы сделать это, используя буферизацию вывода. Взгляните на примеры в ob_get_contents() и ob_start().

 <? ob_start(); ?>

All kinds of stuff, maybe some <?= "php"; ?> etc.

<? $var = ob_get_contents(); ?>
  

Комментарии:

1. Это то, что я искал, heredoc также решает мою проблему, но оставляет код окрашенным как php в Dreamweaver, что было одной из причин, по которой я этого хотел.

2. Однако также необходимо сделать одну вещь, без ob_end_clean(); которой исходный HTML все равно будет выведен.

3. Или даже вы можете просто использовать ob_get_clean() вместо выполнения ob_get_contents() ob_end_clean()

Ответ №2:

Возможно, вы имеете в виду синтаксис Heredoc:

 <?php
$var = <<<EOD
text goes here
EOD;
?>
  

Комментарии:

1. Обратите внимание, что при этом будет сгенерирована строка "ttext goes herent" . Будьте осторожны с пробелами.

2. В конце EOD не должно быть отступа, оно должно быть в первом столбце. Кроме того, таким образом, текст будет содержать пробелы впереди.

3.@Eric Хорошая мысль. Однако я отредактировал вкладки (спасибо за ваше первоначальное редактирование — я забыл), так как они EOD; должны (AFAIR) находиться в начале строки.

4. @Blagovest Buyukliev Да, это произошло из-за коллизии редактирования 🙂

Ответ №3:

Ознакомьтесь с этим сообщением в facebook в блоге о XHP, языке, который допускает XML-литералы в коде PHP.