56

作为一个新手,我被建议最好使用heredoc,而不是太多的嵌套代码(请参阅PHP代码中的Unexpected T_ELSE)。

但是我无法理解heredoc和nowdoc之间是否存在显着差异。

与对新手理解很重要的另一个相比,heredoc 和 nowdoc 的优势是什么(即不是很小的优势,但对我来说很重要)。

4

4 回答 4

133

Nowdocs 是单引号字符串,就像 heredocs 是双引号字符串。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 更易于使用。就这样。

于 2012-06-22T09:03:38.400 回答
2

heredocs
1. heredocs文本的行为就像一个双引号字符串,没有双引号。
2、heredoc中的引号不需要转义,但转义码\n换行符
\r回车符\t水平制表符\v垂直制表符\e转义符\f换页符\反斜杠\$美元符号,\" 双引号
仍然可以使用。变量被扩展了,但是当在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代码和转义码,不需要转义。

例子 :

$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 标识符,尤其是那些关于结束标识符外观的规则。

于 2017-10-13T09:42:54.080 回答
0

当您不想处理引用和取消引用复杂字符串时,Nowdoc 非常棒,因为它不会解释任何引号并且它不会接受变量。因此,它非常适合手动显示实际的代码片段!

但是,如果您将 heredocs 和 nowdocs 混合用于字符串内容块,这很容易陷入其中,那么无论您在哪里使用 heredoc,您都可能很容易遇到 XSS(跨站点脚本)问题!因此,这种方法对我来说还不够干净,无法推荐给从 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 代替适当的模板方法或模板引擎。

无论语言或技术之间存在接口,您都必须进行编码。php转sql?绑定。php转html?编码。http到php?

于 2012-11-16T21:24:13.403 回答
0

Heredoc 比 "text"、echo 'text' 和 nowdoc 快 1000 倍。

Sql1 与 echo = 0.00011205673217773

带有heredoc的sql2 = 9.7751617431641E-6

结果 = Sql1 慢了 1046.3414634146%。

于 2020-12-27T09:20:44.660 回答