Яка перевага використання 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'
Гередок є чудовою альтернативою цитованим рядкам через підвищення читабельності та ремонтопридатності. Вам не доведеться уникати лапок і (хороших) 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;
Деякі 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 дозволяє вам відмовитися від необхідності уникати цитат, тому текст, який ви бачите, - це текст, який ви виводите. Зрозуміло, що є деякі негативи, наприклад, ви не можете відступити від свого гередока, і це може розчаруватися в певній ситуації, особливо якщо ваш стикер для єдиного синтаксису, який я є.