0

我正在关注一本书教程,作者这样做是为了显示 html

埃克斯:

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_OPTIONShtmlADMIN_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;
4

7 回答 7

2

是赫雷多克。通常不经常使用。

我认为您的第二个示例不起作用,因为结束标识符行不是“干净的”。分号后面有一个空格,而第一个和第三个示例是干净的。

于 2011-03-22T22:34:28.653 回答
2

正如其他人提到的,这被称为heredoc

您可以自由选择标识符。它与使用双引号非常相似,您也可以嵌入变量{$var}。因此,您也不能在任何静态上下文中使用它们,例如类中的默认值consts 或define()s。这就是引入nowdocs的原因(在 PHP 5.3 中)。

如果您阅读手册条目,您会很快发现为什么您的示例不起作用;结束标识符前不能有任何空格或制表符。

手册

需要注意的是,带有结束标识符的行不能包含其他字符,可能除了分号 (;)。这尤其意味着标识符可能不会缩进,并且分号之前或之后可能没有任何空格或制表符。同样重要的是要认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符。

于 2011-03-22T22:36:43.363 回答
0

这称为Heredoc,它们的行为与带双引号的字符串完全一样,除了没有双引号..因此您不需要转义它们。

它还保留文本中的换行符和其他空格。

ADMIN_OPTIONS只是打开和关闭操作的标识符。

于 2011-03-22T22:29:09.080 回答
0

您使用的语法称为 heredoc,PHP 手册的以下部分对此进行了说明:

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

基本上,它只是将字符串封装在引号中的替代方法。

于 2011-03-22T22:31:08.687 回答
0

这些与以下内容完全相同:

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;
于 2011-03-22T22:35:32.833 回答
0

在非工作示例中,分号后面有一个空格,这就是 PHP 无法识别它的原因。

于 2011-03-22T22:36:35.160 回答
0

查看 OP 的源代码后,可以注意到第二种情况下的间距和制表与第一种和第三种情况不同。

许多人提到的Heredoc要求您的终结器是该行中唯一的项目。您不能有一个制表符,或它前面的任何其他空白。

祝你好运!

于 2011-03-22T22:38:38.000 回答