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 相关文章推荐
用DBSQL类加快开发MySQL数据库程序的速度
Oct 09 PHP
php创建多级目录代码
Jun 05 PHP
php生成html文件方法总结
Dec 01 PHP
php的sso单点登录实现方法
Jan 08 PHP
php判断并删除空目录及空子目录的方法
Feb 11 PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
php中如何执行linux命令详解
Nov 06 PHP
php的无刷新操作实现方法分析
Feb 28 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中关于php.ini参数优化详解
2020/02/28 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
jQuery Ajax之load()方法
2009/10/12 Javascript
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
Python Des加密解密如何实现软件注册码机器码
2020/01/08 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
使用Python发现隐藏的wifi
2020/03/04 Python
如何基于python实现不邻接植花
2020/05/01 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
教师节演讲稿
2014/05/06 职场文书
北京奥运会口号
2014/06/21 职场文书
先进教师事迹材料
2014/12/16 职场文书
2015暑期社会实践调查报告
2015/07/14 职场文书
描写九月优美句子(39条)
2019/09/11 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang