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 自写函数代码 获取关键字 去超链接
Feb 08 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
php利用腾讯ip分享计划获取地理位置示例分享
Jan 20 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
Laravel 实现密码重置功能
Feb 23 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
php屏蔽错误及提示的方法
May 10 PHP
is_file和file_exists效率比较
Mar 14 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目录函数实现创建、读取目录教程实例
2011/01/13 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
javascript动态加载二
2012/08/22 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
JS画线(实例代码)
2013/11/20 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
@angular前端项目代码优化之构建Api Tree的方法
2018/12/24 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
js中!和!!的区别与用法
2020/05/09 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
python区分不同数据类型的方法
2019/10/14 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Python类继承和多态原理解析
2020/02/05 Python
Python爬虫实现HTTP网络请求多种实现方式
2020/06/19 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
几道Web/Ajax的面试题
2016/11/05 面试题
淘宝店策划方案
2014/06/07 职场文书
推荐信范文大全
2015/03/27 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
培训计划通知
2015/07/15 职场文书
学困生转化工作总结
2015/08/13 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python