Intereting Posts
Публикация проверки и представления собственной формы в PHP laravel использовать сессию для хранения поля ввода и перейти на другую страницу Symfony – аннотация никогда не была импортирована Конфликт версий Apache Настройка переменных среды со встроенным веб-сервером PHP Неужели невозможно написать подсказку пароля php cli, которая скрывает пароль в окнах? Собрать $ _POST из нескольких блоков флажков Можно ли использовать для цикла внутри коммутатора? Основной вопрос группировки массива PHP MySQL PHP и API перевода Bing Разница между «включать» и «требовать» в php как использовать платформу twitter bootstrap в приложении zend framework 1? Как получить изображения из папки по одному и отобразить на странице с помощью PHP imagecreatefromstring (): данные не находятся в распознанном формате в Как поставить другие элементы из двух массивов рядом с аналогичными в PHP

Строковые правила PHP Heredoc

Может ли кто-нибудь здесь изучить тонкости использования heredoc в PHP с помощью примеров PHP-кода? , на основе того, что говорится в руководстве ниже?

Руководство php.net говорит:

Очень важно отметить, что строка с закрывающим идентификатором не должна содержать других символов, кроме, возможно, точки с запятой ( ; ). Это означает, что идентификатор не может быть отступом, и не должно быть пробелов или вкладок до или после точки с запятой. Также важно понимать, что первый символ перед закрывающим идентификатором должен быть новой строкой, определенной локальной операционной системой. Это \n в системах UNIX, включая Mac OS X. Заключительный разделитель (возможно, за которым следует точка с запятой) также должен следовать новой строке.

Если это правило нарушено, а закрытый идентификатор не является «чистым», он не будет считаться закрывающим идентификатором, а PHP продолжит искать его. Если правильный идентификатор закрытия не найден до конца текущего файла, в последней строке будет отображаться ошибка синтаксического анализа.

Heredocs нельзя использовать для инициализации свойств класса. Начиная с PHP 5.3 это ограничение допустимо только для heredocs, содержащих переменные.

Вот ссылка на руководство по php: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

это простое использование:

 $bar = "stackoverflowpro"; $foo = <<<HTML <p>Hello $bar</p> HTML; 
 echo <<< _html ... some html code here ... _html; 

Важно отметить, что закрывающий тег точно такой же, как определенный после «<<<», и что закрывающий тег помещается без отступа (без вкладок, полностью липких слева) и закрывается «;».

Примечание: «_» не требуется, но я использую его для указания лучшего, который является закрытым heredoc.

Закрывающий идентификатор heredoc НЕ ДОЛЖЕН иметь никаких символов между началом строки и идентификатором, он МОЖЕТ иметь один ; НЕМЕДЛЕННО после этого и НЕ ДОЛЖЕН иметь никаких других символов после него. Если идентификатор получает отступ, он должен рассматриваться как часть строки heredoc. Единственный символ, который может появиться перед новой строкой ; , Вы даже не можете включать пробелы между идентификатором и ; или между ; и новой строки. Это означает, что если вы используете heredoc внутри вызова функции, вы должны вставить разрыв строки сразу после закрывающего идентификатора (т.е. до любого , или ) и т. Д.).

Другими словами, единственное, что может появиться на линии с закрывающим идентификатором, это сам идентификатор и, возможно, одна точка с запятой ( ; ) сразу после идентификатора. Следующий chararcter (если не в End-Of-File) ДОЛЖЕН быть допустимым символом новой строки для операционной системы, на которой работает PHP.

Это допустимая строка heredoc:

 $text = <<<EOT Hello! EOT; 

Эта строка heredoc не была закрыта и EOT; считается частью строки:

  $text = <<<EOT Hello! EOT; 

В предыдущем примере исправлено:

  $text = <<<EOT Hello! EOT; 

Heredoc внутри вызова функции (обратите внимание, что ); должен появиться на новой строке для работы):

 print(<<<EOT Hello! EOT ); 

То же самое, что и выше, с очень странным отступом (обратите внимание, что единственное, что на закрывающей строке идентификатора – это идентификатор и новая строка). Hello! будет иметь пять пробелов перед ним в строке:

  print(<<<EOT Hello! EOT ); 

Вот попытка на примере, которая охватывает все возможные использования как heredoc, так и nowdoc:

 <?Php if (isset($_GET['css'])) { // SET THE CONTENT TYPE header("Content-type: text/css"); echo // ECHO THE CSS STRING USING HEREDOC // AS YOU NOTICE HERE, WE INSERT THE GET DATA WITH "{}" TO MAKE IT EASIER TO DISTINGUISH THE VARIABLES <<<MYCSS button#{$_GET['css']} { color:white; background-color:black; padding:10px; } MYCSS; // IMMEDIATELY EXIT THE PHP SCRIPT TO SKIP THE REST OF THE CODE exit(); } else if (isset($_GET['js'])) { // SET THE CONTENT TYPE header("Content-type: text/javascript"); echo // ECHO THE JAVASCRIPT STRING USING HEREDOC // AS YOU NOTICE HERE, WE INSERT THE GET DATA WITH "{}" TO MAKE IT EASIER TO DISTINGUISH THE VARIABLES <<<MYJS function doSomething(param) { alert(param); } $(document).ready ( function() { $("button#{$_GET['js']}").click ( function() { doSomething('do me'); } ); } ); MYJS; // IMMEDIATELY EXIT THE PHP SCRIPT TO SKIP THE REST OF THE CODE exit(); } $myAjax = 'https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js'; $buttonID = md5(time().rand(111111,999999)); $myBottom = "\t".'\tlower body'; $doMe= "give head"; $head = <<<GIVEAHEAD <html> <head> <title>An advanced use of heredoc and more</title> <script type='text/javascript' src="$myAjax"></script> <script type='text/javascript' src="{$_SERVER['PHP_SELF']}?js={$buttonID}"></script> <link rel="stylesheet" href="{$_SERVER['PHP_SELF']}?css={$buttonID}" type='text/css'> </head> GIVEAHEAD; // HERE'S A VARIETY OF WAYS YOU CAN INSERT A HEREDOC INSIDE A FUNCTION echo iScream ( $doMe, $head ,<<<SHOWMYBODY <body> SHOWMYBODY . <<<_TATSMAHBAREH <button id='$buttonID'>touch me _TATSMAHBAREH // YOU CAN BASICALLY PUT YOUR '.' ANYWHERE BEFORE A HEREDOC, BUT NOT AFTER A HEREDOC .pushIt(). <<<"FINISHOFF" {$myBottom} \taye\n FINISHOFF // A NOW DOC IS THE EQUIVALENT OF SINGLE QUOTE STRINGS // IT DOES NOT RECOGNIZE VARIABLES OR \t AND \n ,<<<'ThisIsANowDoc' $ThisWillNotBeTreatedAsAVariable \tnope </body> </html> ThisIsANowDoc // A HEREDOC OR A NOWDOC CAN BE FOLLOWED BY A SEMICOLON (;), BUT NOT WITH ANYTHING ELSE ); // RETURNING A HEREDOC FROM A FUNCTION function pushIt() { return <<<YOLO </button> YOLO; // ENDING A HEREDOC; YOU CANNOT PUT ANYTHING ELSE // AFTER THE SEMICOLON - NOT EVEN A WHITESPACE } function iScream($act,$insert,$here,$below) { if($act == 'give head') return "$insert$here$below"; } ?>