作为一个新手,我被建议最好使用heredoc,而不是太多的嵌套代码(请参阅PHP代码中的Unexpected T_ELSE)。
但是我无法理解heredoc和nowdoc之间是否存在显着差异。
与对新手理解很重要的另一个相比,heredoc 和 nowdoc 的优势是什么(即不是很小的优势,但对我来说很重要)。
作为一个新手,我被建议最好使用heredoc,而不是太多的嵌套代码(请参阅PHP代码中的Unexpected T_ELSE)。
但是我无法理解heredoc和nowdoc之间是否存在显着差异。
与对新手理解很重要的另一个相比,heredoc 和 nowdoc 的优势是什么(即不是很小的优势,但对我来说很重要)。
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 更易于使用。就这样。
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 标识符,尤其是那些关于结束标识符外观的规则。
当您不想处理引用和取消引用复杂字符串时,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?
Heredoc 比 "text"、echo 'text' 和 nowdoc 快 1000 倍。
Sql1 与 echo = 0.00011205673217773
带有heredoc的sql2 = 9.7751617431641E-6
结果 = Sql1 慢了 1046.3414634146%。