Нет веской причины, по которой заместители лучше наследственных
Шакти Сингх,
18
Я отредактировал это, чтобы сделать его более конструктивным, и сделал вопрос вики-сообщества, так как это довольно субъективно. Примечание. Сообщество все еще может закрыть это, я решил оставить его открытым, потому что вы получаете качественные ответы.
Тим Пост
9
Почему именно этот вопрос не считается конструктивным?
Ambo100
Ответы:
218
Синтаксис 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 useof here documents";
PProblem с вышеупомянутым является синтаксической ошибкой (отсутствующая экранированная кавычка), которую я только что представил в отличие от здесь синтаксиса документа:
$x =<<<EOF
The point of the "argument" was to illustrate the useof here documents
EOF;
Это немного стиль, но я использую следующее как правила для одинарных, двойных и здесь документов для определения строк:
Одиночные кавычки используются, когда строка является константой'no variables here'
Двойные кавычки, когда я могу поместить строку в одну строку и требовать интерполяции переменных или встроенной одинарной кавычки"Today is ${user}'s birthday"
Здесь документы для многострочных строк, которые требуют форматирования и интерполяции переменных.
Nitpick на вашем примере SQL: вы не должны использовать двойные кавычки там в первую очередь. Это работает только с MySQL и только тогда, когда этот сервер не работает в --ansiрежиме совместимости. Строки SQL должны использовать одинарные кавычки.
Марио
17
@mario Это было для иллюстрации проблемы с использованием двойных кавычек вообще, а не о специфике sql
Wes
4
Нельзя сказать, что размещение переменных в запросе напрямую - это плохие, плохие манеры :-P
Ваш здравый смысл
5
@Wes и @mario Это ANSI SQL:SELECT * FROM "order" WHERE "table"='1'
программы
11
«Нельзя сказать, что размещение переменных в запросе напрямую - это плохие, плохие манеры». Это совсем не так. Размещение неподтвержденного ввода в операторах SQL - это «плохие манеры». Размещение переменных внутри операторов SQL иногда необходимо.
vogomatix
67
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 не будут выделять синтаксис для этого языка, что приводит к плохой читаемости и большим трудностям в обслуживании.
Вам случайно не знакома функция PHP " Побег из PHP "?
Ваш здравый смысл
5
Экранирование из PHP иногда хорошо, но когда вы повторяете много вещей, ваша подсветка синтаксиса прерывается, вы должны печатать больше символов простым выходом из PHP, и у PHP есть больше команд для выполнения вместо одного эха. Кроме того, вы можете установить строку Heredoc для переменной и повторить ее позже. Выход из PHP для вашего HTML означает, что он тут же распечатывается. Не могу сохранить его на потом.
Джейк Уилсон
2
1. вы можете использовать буферизацию вывода для сохранения вывода. 2. Вы использовали echo в своем первом примере. 3. (хорошо) IDE или текстовые редакторы НИКОГДА не нарушают подсветку HTML, когда вы используете выход из PHP. 4. Какую IDE выделяет синтаксис для HEREDOC и какие языковые правила используются? Можно ли видеть SQL-запрос выделенным в виде текста HTML?
Я думаю, вы неправильно понимаете, что Heredoc применяется только к строкам HTML. Heredoc - это просто альтернативный способ определения строки, будь то HTML, SQL-запрос или что угодно. Их легче писать и поддерживать, ответ Уэса выше показывает, что это вполне очевидно (что, если вы заметили, имеет правильную подсветку синтаксиса. Не жалуйтесь мне на сбой NetBeans). Я не уверен, почему вы, кажется, так склонны отказаться от голосования за ответ на вики-вопрос сообщества ... Хотите верьте, хотите нет, но оригинальные разработчики PHP могли включать Heredoc в PHP, потому что это может быть полезно в некоторых случаях ... .
Джейк Уилсон
8
Некоторые 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 для меня намного чище, и он действительно полезен для многострочных строк и позволяет избежать проблем с цитированием. В свое время я использовал их для построения SQL-запросов:
На мой взгляд, вероятность появления синтаксической ошибки ниже, чем при использовании кавычек:
Другой момент - избегать двойных кавычек в вашей строке:
PProblem с вышеупомянутым является синтаксической ошибкой (отсутствующая экранированная кавычка), которую я только что представил в отличие от здесь синтаксиса документа:
Это немного стиль, но я использую следующее как правила для одинарных, двойных и здесь документов для определения строк:
'no variables here'
"Today is ${user}'s birthday"
источник
--ansi
режиме совместимости. Строки SQL должны использовать одинарные кавычки.SELECT * FROM "order" WHERE "table"='1'
Heredoc - отличная альтернатива строкам в кавычках из-за повышенной читабельности и удобства обслуживания. Вам не нужно избегать кавычек, и (хорошие) IDE или текстовые редакторы будут использовать правильную подсветку синтаксиса.
Очень распространенный пример: вторя из HTML внутри PHP:
Это легко читать и легко поддерживать.
Альтернативой является вывод строк в кавычках, которые в конечном итоге содержат экранированные кавычки, а IDE не будут выделять синтаксис для этого языка, что приводит к плохой читаемости и большим трудностям в обслуживании.
Обновленный ответ для вашего здравого смысла
Конечно, вы не захотите видеть SQL-запрос выделенным как HTML. Чтобы использовать другие языки, просто измените язык в синтаксисе:
источник
Некоторые IDE автоматически выделяют код в строках heredoc, что делает использование heredoc для XML или HTML визуально привлекательным.
Лично мне это нравится для более длинных частей, например, XML, так как мне не нужно заботиться о кавычках и могу просто вставить XML.
источник
Прежде всего, все причины субъективны. Это скорее вопрос вкуса, чем причины.
Лично я нахожу heredoc совершенно бесполезным и использую его время от времени, большую часть времени, когда мне нужно вставить некоторый HTML-код в переменную и не хочу беспокоиться о буферизации вывода, например, чтобы сформировать сообщение электронной почты в формате HTML.
Форматирование не соответствует общим правилам отступов, но я не думаю, что это имеет большое значение.
Что касается примеров в принятом ответе, то это просто обман.
Строковые примеры, на самом деле, более лаконичны, если их не обманывать
источник
Я не знаю, скажу ли я, что heredoc - это лень. Можно сказать, что делать что-либо - это лень, потому что всегда есть более громоздкие способы сделать что-либо.
Например, в определенных ситуациях вы можете захотеть вывести текст со встроенными переменными без необходимости извлечения из файла и запуска замены шаблона. Heredoc позволяет вам отказаться от кавычек, поэтому текст, который вы видите, является текстом, который вы выводите. Ясно, что есть некоторые недостатки, например, вы не можете сделать отступ в своем наследственности, и это может разочаровать вас в определенной ситуации, особенно если вы сторонник унифицированного синтаксиса, которым я являюсь.
источник