Преимущества / неудобства heredoc vs nowdoc в php

В качестве новичков мне рекомендуется использовать heredoc по сравнению со слишком большим количеством вложенных кодов (см. Неожиданный T_ELSE в php-коде ).

Но я не могу понять, есть ли существенная разница между heredoc и nowdoc.

Каковы были бы преимущества для heredoc и nowdoc по сравнению с другими, которые были бы важны для новичков, чтобы понять (т. Е. Не очень незначительные преимущества, но важные для понимания для меня).

Nowdocs – это строки с одним кавычком, что heredocs – это строки с двойными кавычками. A nowdoc задается аналогично heredoc, но синтаксический анализ не выполняется внутри nowdoc. Конструкция идеально подходит для встраивания PHP-кода или других больших блоков текста без необходимости экранирования.

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc

Другими словами:

$foo = 'bar'; $here = <<<HERE I'm here, $foo! HERE; $now = <<<'NOW' I'm now, foo! NOW; 

$here : «Я здесь, бар!» , а $now«Я сейчас, $ foo!» ,

Если вам не нужна переменная интерполяция, но вам нужны специальные символы, такие как $ внутри вашей строки, Nowdocs проще в использовании. Это все.

Nowdoc отлично работает, когда вы не хотите иметь дело с цитатами и нечеткими сложными строками, поскольку они не будут интерпретировать кавычки и не будут принимать переменные. Таким образом, он хорошо подходит для отображения фактических фрагментов кода вручную!

Однако, если вы используете сочетание heredocs и nowdocs для блоков строкового контента, к которым легко поддаться соблазну, вы можете легко столкнуться с проблемами XSS (межсайтовый скриптинг), где бы вы ни использовали heredoc! Таким образом, этот подход просто не достаточно чист для меня, чтобы рекомендовать разработчику, начиная с php! Вместо этого вы должны пытаться использовать шаблоны (любого типа или любого другого механизма шаблонов) для этих больших блоков информации. В конце концов, вы не хотите, чтобы html в вашем php, и вы, конечно же, не хотите, чтобы javascript, введенный пользователем, например:

 $username = '<script>alert(document.cookie.toString())</script>'; $insecure_example = <<<HERE I really like having my site exploited, $username HERE; 

Поэтому не используйте HEREDOCS и NOWDOCS вместо правильного подхода к шаблонам или механизма шаблонов.

heredocs
1. Текст heredocs ведет себя точно так же, как строка с двумя кавычками, без двойных кавычек.
2. Котировки в heredoc не должны быть экранированы, но escape-коды \ n linefeed,
\ r возврат каретки, \ t горизонтальная вкладка, \ v вертикальная вкладка, \ e escape, \ f form feed, \ backslash, \ $ знак доллара, \ "двойная кавычка все еще можно использовать. Переменные расширены, но одинаковы должны быть приняты при выражении сложных переменных внутри heredoc, как со строками.

Пример :

 $myname='Tikku'; $heredoc_exmaple= <<<HEREDOC \\n ,\\r ,\t ,\r ,\\v ,\\e ,\f ,\\ , \ ,$89 ,$ , $myname , ' , \$myname , \" ,\' HEREDOC; echo $heredoc_exmaple; //OUTPUT \n ,\r , , ,\v ,\e , ,\ , \ ,$89 ,$ , Tikku , ' , $myname , \" ,\' 

nowdocs
1. Текст nowdocs ведет себя как строка с одним кавычком без одиночных кавычек.
2. Котировки в nowdocs не обязательно должны быть экранированы. Переменные не расширяются в нем. Преимущество nowdocs – это встраивание кода PHP и escape-кодов без необходимости экранирования.

Пример :

 $myname='Tikku'; $nowdoc_exmaple= <<<'NOWDOC' \\n ,\\r ,\t ,\r ,\\v ,\\e ,\f ,\\ , \ ,$89 ,$ , $myname , ' , \$myname , \" ,\' NOWDOC; echo $nowdoc_exmaple; //OUTPUT \\n ,\\r ,\t ,\r ,\\v ,\\e ,\f ,\\ , \ ,$89 ,$ , $myname , ' , \$myname , \" ,\' 

Синтаксис : nowdoc идентифицируется с той же <<< последовательностью, используемой для heredocs, но следующий идентификатор заключен в одинарные кавычки, например <<< 'NOWDOC'. Все правила для идентификаторов heredoc также применяются к идентификаторам nowdoc, особенно к появлению закрывающего идентификатора.