PHP定界符详解(heredoc和nowdoc语法结构)

2018-04-02 10:08:00
linefo
原创
862


写在前面


PHP定界符一般用于保持输出内容的格式,比如HTML代码的缩进、换行这些。


比如输出<div>和<p>的嵌套,如果要保持缩进和换行,使用echo你要可能要写成这样:


<?php
	echo "<div>\n";
	echo "\t<p>content</p>\n";
	echo "</div>";


上面的方式不够直观。而使用定界符,你可以写成这样:


<?php
echo <<<EOT
	<div>
		<p>content</p>
	</div>
EOT;
?>


heredoc语法结构


上面的定界符例子是heredoc语法结构。上面省略了双引号,完整的语法结构应当是:



echo/print <<<"[标识符]"
        ........
[标识符];



在标识符中间,我们可以使用保留格式的输出内容,并且还可以在中间插入变量。

变量也可以用{}符号包裹,这样看起来更清晰一点。



<?php
$p1 = "c_1";
$p2 = "c_2";
echo <<<"EOT"
	<div>
		<p>$p1</p>
		<p>{$p2}</p>
	</div>
EOT;
?>



nowdoc语法结构


PHP5.3版本开始加入这个结构,对标识符使用单引号,语法结构如下:



echo/print <<<'[标识符]'
        ........
[标识符];


和heredoc语法结构的不同在于,输出内容中,无法解析变量。

可以等同理解为,PHP中,双引号包裹的字符串中可以解析变量,而单引号包裹的字符串中无法解析变量的那套机制。


语法要点


无论是heredoc或nowdoc语法结构,都要遵守下面几个规则:


(1)php的标识符必须要有结束符,即?>,否则该PHP文件无法使用定界符

(2)定界符以<<<来声明定界的符号(可随意命名该定界符号),定界符号必须紧跟<<<,并且<<<[标识符]号后面不能有空格、缩进或输出

(3)结束时,[标识符];前面不能有任何空格、缩进或输出


其他要说的


1.

在PHPWIND或者其他地方,我们经常在模板看到下面这种写法



<!--
        ...................
        
print <<<EOT
-->
        ...................
<!--
EOT;


上面这种写法是为了,如果PHP代码没能正常执行,就当成注释,不要显示在页面上


2.

其实我更喜欢用下面这种方式去实现前后端代码分隔


<?php if(1){ ?>
	...........
<?php endif; ?>

文章分类
联系我们
联系人: Mr.Chen
QQ: 185391277