В чем преимущество использования 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, и это может разочаровываться в определенной ситуации, особенно если вы придерживаетесь единого синтаксиса, которым я являюсь.