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分页显示制作详细讲解
Nov 19 PHP
初次接触php抽象工厂模式(Elgg)
Mar 21 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
Jun 30 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
php封装好的人民币数值转中文大写类
Dec 20 PHP
Centos PHP 扩展Xchche的安装教程
Jul 09 PHP
php将print_r处理后的数据还原为原始数组的解决方法
Nov 02 PHP
PHP排序二叉树基本功能实现方法示例
May 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中常用的预定义变量小结
2012/05/09 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
python中from module import * 的一个坑
2014/07/20 Python
python中while循环语句用法简单实例
2015/05/07 Python
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
在Python中操作日期和时间之gmtime()方法的使用
2015/05/22 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
python列表的常用操作方法小结
2016/05/21 Python
Python字符串处理实现单词反转
2017/06/14 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
python读写csv文件方法详细总结
2019/07/05 Python
ML神器:sklearn的快速使用及入门
2019/07/11 Python
python批量修改ssh密码的实现
2019/08/08 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
施工人员岗位职责
2013/12/12 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电