php中heredoc与nowdoc的优点/不便之处

2022-08-30 09:45:05

作为一个新手,与太多的嵌套代码相比,我被建议最好使用heredoc(参见php代码中的意外T_ELSE)。

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

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


答案 1

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“我在这里,酒吧!”,而“我现在,$foo!”$now

如果您不需要变量插值,但需要特殊字符(如字符串内部),则 Nowdocs 更易于使用。就这样。$


答案 2

遗传
1.heredocs 文本的行为就像一个双引号字符串,没有双引号。
2. heredoc 中的引号不需要转义,但转义码 \n 换行符、\r 回车符、
\t 水平制表符、\v 垂直制表符、\e 转义键、\f 换行符、\反斜杠、\$ 美元符号,\“ 双引号
仍然可以使用。变量是扩展的,但是在表示遗传内复杂变量时,必须像表达字符串一样小心。

例:

$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 , \" ,\'

现在docs
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'。遗传标识符的所有规则也适用于 nowdoc 标识符,特别是那些关于关闭标识符外观的规则。


推荐