В чем преимущество использования Heredoc в PHP?
В чем преимущество использования Heredoc в PHP и вы можете показать пример?
Ответы
Ответ 1
Синтаксис здесь doc намного чище для меня, и он действительно полезен для многострочных строк и избегает проблем с цитированием. Еще в тот день, когда я использовал их для построения SQL-запросов:
$sql = <<<SQL
select *
from $tablename
where id in [$order_ids_list]
and product_name = "widgets"
SQL;
Для меня это имеет меньшую вероятность ввести синтаксическую ошибку, чем использование котировок:
$sql = "
select *
from $tablename
where id in [$order_ids_list]
and product_name = \"widgets\"
";
Еще один момент - избегать двойных кавычек в вашей строке:
$x = "The point of the \"argument" was to illustrate the use of here documents";
Проблема с приведенным выше является синтаксической ошибкой (отсутствующей скрытой цитатой), которую я только что представил, в отличие от синтаксиса документа:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
Это немного стиль, но я использую следующие правила для одиночных, двойных и здесь документов для определения строк:
- Кавычки используются, когда строка является константой, подобной
'no variables here'
- Double, когда я могу поместить строку в одну строку и потребовать переменную интерполяцию или встроенную одиночную кавычку
"Today is ${user} birthday"
- Здесь документы для многострочных строк, которые требуют форматирования и интерполяции переменных.
Ответ 2
Heredoc - отличная альтернатива цитированным строкам из-за повышенной читаемости и ремонтопригодности. Вам не нужно избегать цитат, и (хороший) IDE или текстовые редакторы будут использовать правильную подсветку синтаксиса.
ОЧЕНЬ обычный пример: повторение HTML из PHP:
$html = <<<HTML
<div class='something'>
<ul class='mylist'>
<li>$something</li>
<li>$whatever</li>
<li>$testing123</li>
</ul>
</div>
HTML;
// sometime later
echo $html;
Легко читается. Легкость в обслуживании.
Альтернативой является эхо-цитирование строк, которые в конечном итоге содержат экранированные кавычки, а IDE не выделяют синтаксис этого языка, что приводит к плохой читаемости и большим трудностям в обслуживании.
Обновленный ответ для вашего общего чувства
Конечно, вы не захотите, чтобы SQL-запрос был выделен как HTML. Чтобы использовать другие языки, просто измените язык в синтаксисе:
$sql = <<<SQL
SELECT * FROM table
SQL;
Ответ 3
Некоторые IDE автоматически запускают код в heredoc-строках, что делает использование heredoc для xml или html визуально привлекательным.
Мне лично это нравится для более длинных частей, т.е. XML, так как мне не нужно заботиться о цитировании кавычек и просто вставить XML.
Ответ 4
Прежде всего, все причины субъективны.
Это больше похоже на вопрос вкуса, а не на причину.
Лично я считаю, что heredoc совершенно бесполезен и иногда использует большую часть времени, когда мне нужно получить некоторый HTML в переменной и не хочу беспокоиться о буферизации вывода, например, для формирования сообщения электронной почты HTML.
Форматирование не соответствует общим правилам отступов, но я не думаю, что это очень важно.
//some code at it proper level
$this->body = <<<HERE
heredoc text sticks to the left border
but it seems OK to me.
HERE;
$this->title = "Feedback";
//and so on
Что касается примеров в принятом ответе, это просто обман.
Строковые примеры на самом деле более сжатые, если вы не обманываете их
$sql = "SELECT * FROM $tablename
WHERE id in [$order_ids_list]
AND product_name = 'widgets'";
$x = 'The point of the "argument" was to illustrate the use of here documents';
Ответ 5
Я не знаю, могу ли я сказать, что heredoc - это лень, можно сказать, что делать что-то лень, так как всегда есть более громоздкие способы сделать что-либо.
Например, в некоторых ситуациях вы можете вывести текст со встроенными переменными без необходимости извлекать из файла и запускать замену шаблона. Heredoc позволяет вам отказаться от кавычек, поэтому текст, который вы видите, - это текст, который вы выводите. Ясно, что есть некоторые негативы, например, вы не можете отступать от своего heredoc, и это может разочаровываться в определенной ситуации, особенно если вы придерживаетесь единого синтаксиса, которым я являюсь.