В чем преимущество использования heredoc в PHP, и можете ли вы показать пример?
В чем преимущество использования heredoc в PHP, и можете ли вы показать пример?
Ответы:
Синтаксис heredoc для меня намного чище, и он действительно полезен для многострочных строк и позволяет избежать проблем с цитированием. В свое время я использовал их для построения 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";
PProblem с вышеупомянутым является синтаксической ошибкой (отсутствующая экранированная кавычка), которую я только что представил в отличие от здесь синтаксиса документа:
$x = <<<EOF
The point of the "argument" was to illustrate the use of here documents
EOF;
Это немного стиль, но я использую следующее как правила для одинарных, двойных и здесь документов для определения строк:
'no variables here'
"Today is ${user}'s birthday"
--ansi
режиме совместимости. Строки SQL должны использовать одинарные кавычки.
SELECT * FROM "order" WHERE "table"='1'
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;
Прежде всего, все причины субъективны. Это скорее вопрос вкуса, чем причины.
Лично я нахожу 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 позволяет вам отказаться от кавычек, поэтому текст, который вы видите, является текстом, который вы выводите. Ясно, что есть некоторые недостатки, например, вы не можете сделать отступ в своем наследственности, и это может разочаровать вас в определенной ситуации, особенно если вы сторонник унифицированного синтаксиса, которым я являюсь.