как использовать тег <<< в php - PullRequest
0 голосов
/ 23 марта 2011

Я следую учебному пособию, в котором автору действительно нравится отображать html

eks:

return <<<ADMIN_OPTIONS

<a href="admin.php" class="admin">+ add a new event</a>
<form action="assets/inc/process.inc.php" method="post">
    <div>
        <input type="submit" value="Log Out" class="admin" />
        <input type="hidden" name="token" value="$_SESSION[token]" />
        <input type="hidden" name="action" value="user_logout" />
    </div>
</form>
ADMIN_OPTIONS;

Я не совсем понимаю <<<, насколько я понимаю васможно назвать ADMIN_OPTIONS как угодно, если вы закончите html теми же словами.Хотя я действительно не понимаю, когда я пишу ADMIN_OPTIONS;, и весь мой код переходит в режим комментариев.Например:

Приведенный выше пример работает, это не так:

return <<<ADMIN_OPTIONS

<a href="login.php">Log In</a>

ADMIN_OPTIONS; 

, но это работает:

        return <<<ADMIN_OPTIONS

        <a href="login.php">Log In</a>

ADMIN_OPTIONS;

Ответы [ 7 ]

2 голосов
/ 23 марта 2011

Как уже упоминалось, это называется heredoc .

Вы можете свободно выбрать идентификатор. Это очень похоже на использование двойных кавычек, вы также можете вставлять переменные с помощью {$var}. Из-за этого вы также не можете использовать их в любом статическом контексте, как значение по умолчанию в классе, const с или define() с. Именно поэтому были введены nowdocs (в PHP 5.3).

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

Из руководства :

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

2 голосов
/ 23 марта 2011

Это Хередок.Обычно не используется часто.

Я думаю, что ваш второй пример не работает, потому что строка идентификатора конца не "чистая".После точки с запятой есть пробел, тогда как первый и третий примеры чистые.

0 голосов
/ 23 марта 2011

После просмотра источника OP можно заметить, что интервал и табуляция не совпадают во втором случае с первым и третьим случаями.

Heredoc , как уже упоминалось многими, требует, чтобы ваш терминатор был единственным элементом в строке. Вы не можете иметь вкладку или любой другой пробел, предшествующий ей.

Удачи!

0 голосов
/ 23 марта 2011

В нерабочем примере у вас есть пробел после точки с запятой, поэтому PHP его не распознает.

0 голосов
/ 23 марта 2011

Они точно такие же, как:

return "

foo bar

";

Разница в том, что вы можете указать последовательность символов завершения самостоятельно, то есть вы не ограничены кавычками для начала и конца строки.

return <<<TERMINATIONSEQUENCE

Because I'm not limited to "quotes",
I can 'freely' use them in "this 'string"'
without worrying about escaping them!

TERMINATIONSEQUENCE;
0 голосов
/ 23 марта 2011

Синтаксис, который вы используете, называется heredoc, и он объясняется в следующем разделе руководства по PHP:

http://php.net/manual/en/language.types.string.php

По сути, все это альтернатива инкапсуляции строкв кавычках.

0 голосов
/ 23 марта 2011

Это называется Heredoc , они ведут себя точно так же, как строки с двойными кавычками, за исключением того, что без двойных кавычек .. поэтому вам не нужно избегать их.

Он также сохраняет разрывы строк и другие пробелы в тексте.

ADMIN_OPTIONS - это просто идентификатор для открытия и закрытия операции.

...