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 相关文章推荐
BBS(php &amp; mysql)完整版(三)
Oct 09 PHP
php获取某个目录大小的代码
Sep 10 PHP
php 调用远程url的六种方法小结
Nov 02 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
php获得url参数中具有&amp;的值的方法
Mar 05 PHP
PHP面向对象程序设计之类常量用法实例
Aug 20 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
php实现JWT验证的实例教程
Nov 26 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/02/03 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
js Flash插入函数免激活代码
2009/03/31 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
vue-iview动态新增和删除的方法
2020/06/17 Javascript
Python中集合类型(set)学习小结
2015/01/28 Python
简单了解Django ContentType内置组件
2019/07/23 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
python 弧度与角度互转实例
2020/04/15 Python
python对execl 处理操作代码
2020/06/22 Python
django rest framework 过滤时间操作
2020/07/12 Python
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
装饰工程师岗位职责
2014/06/08 职场文书
iPhone13将有八大升级
2021/04/15 数码科技
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL