В чем преимущество использования Heredoc в PHP и вы можете показать пример?
Синтаксис здесь 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'
"Today is ${user}'s birthday"
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;
-$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;
Некоторые IDE автоматически запускают код в heredoc-строках, что делает использование heredoc для xml или html визуально привлекательным.
Мне лично это нравится для более длинных частей, т. Е. XML, так как мне не нужно заботиться о цитировании кавычек и просто вставить XML.
Прежде всего, все причины субъективны.
Это скорее скорее вопрос вкуса, чем причина.
Лично я нахожу heredoc совершенно бесполезным и использую иногда, большую часть времени, когда мне нужно получить некоторый HTML в переменную и не хочу беспокоиться о буферизации вывода, чтобы сформировать сообщение электронной почты HTML, например.
Форматирование не соответствует общим правилам отступов, но я не думаю, что это большое дело.
//some code at it's 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';
Я не знаю, могу ли я сказать, что heredoc – это лень, можно сказать, что делать что-то лень, так как всегда есть более громоздкие способы сделать что-либо.
Например, в некоторых ситуациях вы можете вывести текст со встроенными переменными без необходимости извлекать из файла и запускать замену шаблона. Heredoc позволяет вам отказаться от кавычек, поэтому текст, который вы видите, – это текст, который вы выводите. Ясно, что есть некоторые негативы, например, вы не можете отступать от своего heredoc, и это может разочаровываться в определенной ситуации, особенно если вы придерживаетесь единого синтаксиса, которым я являюсь.