php中heredoc与nowdoc介绍


Posted in PHP onDecember 25, 2014

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”的效率问题而实现的“高效率”的静态版本

PHP 相关文章推荐
PHP 和 MySQL 基础教程(三)
Oct 09 PHP
ThinkPHP跳转页success及error模板实例教程
Jul 17 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
PHP连接access数据库
Mar 27 PHP
PHP读取PPT文件的方法
Dec 10 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 PHP
Git命令之分支详解
Mar 02 PHP
php中实现xml与mysql数据相互转换的方法
Dec 25 #PHP
推荐5款跨平台的PHP编辑器
Dec 25 #PHP
主流PHP框架的优缺点对比分析
Dec 25 #PHP
10个简化PHP开发的工具
Dec 25 #PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
Dec 25 #PHP
PHP中文编码小技巧
Dec 25 #PHP
PHP中防止SQL注入方法详解
Dec 25 #PHP
You might like
PHP生成静态页面详解
2006/11/19 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
window.open()弹出居中的窗口
2007/02/01 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
澳大利亚家居用品零售商:Harris Scarfe
2020/10/10 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
WINDOWS域的具体实现方式是什么
2014/02/20 面试题
小学毕业寄语大全
2014/04/03 职场文书
公司会议开幕词
2015/01/29 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
让世界充满爱观后感
2015/06/10 职场文书
经销商会议开幕词
2016/03/04 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android