欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php中heredoc与nowdoc介绍

程序员文章站 2023-10-15 10:59:46
heredoc技术,在正规的php文档中和技术书籍中一般没有详细讲述,只是提到了这是一种perl风格的字符串输出技术。但是现在的一些论坛程序,和部分文章系统,都巧妙的使用h...

heredoc技术,在正规的php文档中和技术书籍中一般没有详细讲述,只是提到了这是一种perl风格的字符串输出技术。但是现在的一些论坛程序,和部分文章系统,都巧妙的使用heredoc技术,来部分的实现了界面与代码的准分离,phpwind模板就是一个典型的例子。  

1.以<<<end开始标记开始,以end结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。开始标记和开始标记相同,比如常用大写的eot、eod、eof来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可。  

2.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符.或,来拼接,如下: 

复制代码 代码如下:

$v=2; 
$a= <<<eof 
"abc"$v 
"123" 
eof; 
echo $a; //结果连同双引号一起输出:"abc"2 "123" 

3.heredoc常用在输出包含大量html语法d文档的时候。比如:函数outputhtml()要输出html的主页。可以有两种写法。很明显第二种写法比较简单和易于阅读。 

复制代码 代码如下:

function outputhtml(){ 
echo "<html>"; 
echo "<head><title>主页</title></head>";  
echo "<body>主页内容</body>"; 
echo "</html>; 

function outputhtml() 

echo <<<eot 
   <html> 
   <head><title>主页</title></head> 
   <body>主页内容</body> 
   </html> 
eot; 

outputhtml(); 

在heredoc中会自动替换其中的$变量,将命令和输入放在一块,方便 

附:heredoc和nowdoc的区别

heredoc使用 <<< eot 的标示符,而nowdoc使用 <<< 'eot' 这样的标示符,其中nowdoc是php5.3引进的新技术,它包含了heredoc的语法,只是其中的内容绝对不会进行任何的转义和解释,是什么内容就是什么内容,不会解析php相关的内容
heredoc中的php变量建议使用{$name->change()} 大括号括起来,这样可以避免一定的歧义,如果要原样输出可以使用传说中的转义字符 \ ,转义字符本身可以使用转义字符进行输出,即 \ 这种表示方法,大括号之类的这些都需要转义输出。
为了保证的确可用,建议使用 heredoc 的语法,本身也带有转义,因为php5.3才引进的nowdoc语法,很多云托管坏境很有可能不支持导致歇菜。
最后强调下,heredoc是从php4.0开始引进的,而nowdoc语法则需要5.3版本,因为heredoc包含了nowdoc的功能,所以个人建议还是使用heredoc比较好些。

简单来说:

1、heredoc是动态的 nowdoc是静态的
2、heredoc类似多行的双引号 newdoc类似多行的单引号
3、heredoc是一种专门处理大段字符串的通用处理方案,而nowdoc是php为了弥补动态实现“heredoc”的效率问题而实现的“高效率”的静态版本