#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.