首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php中heredoc与nowdoc的优点/不便

php中heredoc与nowdoc的优点/不便
EN

Stack Overflow用户
提问于 2012-06-22 16:55:20
回答 4查看 30.1K关注 0票数 55

作为一个新手,有人建议我最好使用这里的文档,而不是太多的嵌套代码(参见Unexpected T_ELSE in php code)。

但是我不能理解heredoc和nowdoc之间是否有显著的区别。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-22 17:03:38

Nowdocs对于单引号的字符串就像heredocs对于双引号的字符串一样。指定nowdoc类似于heredoc,但在nowdoc中不进行任何解析。该构造非常适合嵌入PHP代码或其他大型文本块,而无需转义。

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

换句话说:

代码语言:javascript
复制
$foo = 'bar';

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

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

$here是"I'm here,bar !",而$now是"I'm now,$foo !“。

如果您不需要变量插值,但需要在字符串中包含像$这样的特殊字符,那么Nowdocs更容易使用。就这样。

票数 131
EN

Stack Overflow用户

发布于 2017-10-13 17:42:54

heredocs

  1. heredocs文本的行为类似于没有双引号的双引号字符串。
  2. 在文档中的引号不需要转义,但转义代码\n换行符,

\r回车,\t水平制表符,\v垂直制表符,\e转义符,\f换页符,反斜杠,\$美元符号,\“仍然可以使用双引号。变量已扩展,但在中表示复杂变量时必须与字符串一样小心。

示例:

代码语言:javascript
复制
$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文本的行为就像一个单引号的字符串,在中没有单引号的情况下,不需要被escaped.Variables在it.Advantage of 中展开nowdocs嵌入PHP代码和转义代码而不需要转义。

示例:

代码语言:javascript
复制
$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标识符,尤其是那些关于结束标识符的外观的规则。

票数 2
EN

Stack Overflow用户

发布于 2012-11-17 05:24:13

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

然而,如果你混合使用heredocs和nowdocs来处理字符串内容块,这是一个很容易陷入的诱惑,你很容易在使用heredoc的地方遇到XSS (跨站点脚本)问题!因此,这种方法对我来说还不够干净,不能推荐给一个用php开始的开发人员!相反,对于这些大的信息块,您应该尝试使用模板(任何类型的模板,或者您喜欢的任何模板引擎)。毕竟,你不想让html出现在你的php中,当然,你也不想要用户注入的javascript,比如:

代码语言: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?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11153049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档