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 相关文章推荐
PHP4(windows版本)中的COM函数
Oct 09 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
php 魔术方法详解
Nov 11 PHP
PHP查看SSL证书信息的方法
Sep 22 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
Oct 08 PHP
php使用自定义函数实现汉字分割替换功能示例
Jan 30 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
PHP执行系统命令函数实例讲解
Mar 03 PHP
PHP7变量处理机制修改
Mar 09 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/10/09 PHP
php 上传功能实例代码
2010/04/13 PHP
php设置编码格式的方法
2013/03/05 PHP
解析PHP实现下载文件的两种方法
2013/07/05 PHP
php简单图像创建入门实例
2015/06/10 PHP
PHP利用imagick生成组合缩略图
2016/02/19 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
js获取GridView中行数据的两种方法 分享
2013/07/13 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
2016/03/08 Javascript
特殊日期提示功能的实现方法
2016/06/16 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
jQuery实现轮播图效果demo
2020/01/11 jQuery
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
python join方法使用详解
2019/07/30 Python
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
专科文秘应届生求职信
2013/11/18 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
优质护理服务演讲稿
2014/05/07 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript
十大必看国产动漫排名,魁拔上线,第二曾在日本播出
2022/03/18 国漫