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 相关文章推荐
提问的智慧
Oct 09 PHP
模拟xcopy的函数
Oct 09 PHP
php中支持多种编码的中文字符串截取函数!
Mar 20 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
探讨多键值cookie(php中cookie存取数组)的详解
Jun 06 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
Smarty3配置及入门语法
Feb 22 PHP
php readfile()修改文件上传大小设置
Aug 11 PHP
php实现微信支付之现金红包
May 30 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 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初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
JavaScript生成图形验证码
2020/08/24 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
JavaScript事件对象深入详解
2018/12/30 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
Python检测QQ在线状态的方法
2015/05/09 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
MySQL面试题目集锦
2016/04/14 面试题
工程专业求职自荐书范文
2014/02/08 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
公务员检讨书
2014/11/01 职场文书
入伍通知书
2015/04/23 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
餐厅开业活动方案
2019/07/08 职场文书
导游词之广西漓江
2019/11/02 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
python使用glob检索文件的操作
2021/05/20 Python
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
bat批处理之字符串操作的实现
2022/03/16 Python
vue 给数组添加新对象并赋值
2022/04/20 Vue.js
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis