现在文档 (Nowdocs) 对于单引号字符串的作用相当于 HereDoc 对于双引号字符串的作用。 Nowdoc 的形式和 Heredoc 类似,但是 Nowdoc 内部没有任何解析。这种构造方式非常适合嵌入 PHP 代码或其他大型文本块而无需转义。
http://php.net/manual/zh/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更容易使用。就是这样。
示例:
$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)与限定符相同,使用 <<< 序列来标识,但后面的标识符要用单引号括起来,例如 <<<'NOWDOC'。所有限定符标识符的规则也适用于现在文档标识符,特别是关于结束标识符外观方面的规则。当你不想处理引用和取消引用复杂字符串时,Nowdoc 是一个很好的选择,因为它不会解释任何引号并且不接受变量。由于这个原因,它非常适合手动显示实际代码片段!
然而,如果你在使用混合的heredocs和nowdocs来处理字符串内容块时,这是一种容易陷入的诱惑,你可能会在任何地方使用heredoc时遇到XSS(跨站脚本攻击)问题!因此,我不能推荐这种方法给刚开始学习php的开发者!相反,你应该尝试使用模板(无论是什么类型或什么模板引擎),来处理这些大块的信息。毕竟,你不希望在php中混有html,你-绝对不希望在其中包含用户注入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?
Heredoc比"text"、echo 'text'和nowdoc快1000倍。
Sql1使用echo = 0.00011205673217773
Sql2使用heredoc = 9.7751617431641E-6
结果 = Sql1慢了1046.3414634146%。