php中heredoc与nowdoc的使用方法
一、heredoc结构及用法
Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义。其结构中的变量将被替换,但在 heredoc 结构中含有复杂的变量时要格外小心。其对格式化输出内容时,比较有用 。具体其有以下特点:
1、开始标记和结束标记使用相同的字符串,通常以大写字母来写。
2、开始标记后不能出现空格或多余的字符。
3、结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。
4、位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符.或,来拼接 。
如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?phpfunction outputhtml(){ //自 PHP 5.3.0 起还可以在 Heredoc 结构中用双引号来声明标识符,所以开头这句也可以写为echo <<<"EOT"echo <<<EOT <html> <head><title>主页</title></head> <body>主页内容</body> </html>EOT;}outputhtml();?> |
这里,就不用像普通的php写法那样,echo "<html>" echo "<head>……" ,这样不但看上去舒服易读,而且也省去了每行双引号的引用。
再给出一个变量引用的例子:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php$name = '1ss';print <<<EOT<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>Untitled Document</title></head><body><!--12321-->Hello,$name!</body></html>EOT;?> |
二、nowdoc结构及用法
在 PHP 5.3.0 及其以后的版本中增加了nowdoc结构,其用法和heredoc相同,不同的是Nowdoc 结构是类似于单引号字符串的。nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 [CDATA[ ]] 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。
一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<'EOT'。
例如:now结构中复杂变理的示例
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?php$str = <<<'EOD'Example of stringspanning multiple linesusing nowdoc syntax.EOD;/* 含有变量的更复杂的示例 */class foo{ public $foo; public $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); }}$foo = new foo();$name = 'MyName';echo <<<'EOT'My name is "$name". I am printing some $foo->foo.Now, I am printing some {$foo->bar[1]}.This should not print a capital 'A': x41EOT;?> |
其输出为:
|
1
2
3
|
My name is "$name". I am printing some $foo->foo.Now, I am printing some {$foo->bar[1]}.This should not print a capital 'A': x41 |
具体可以和heredoc中的作下比较,在heredoc中,变量会被正常解析。x41也会被解析也A 。
三、其他
在使用heredoc和nowdoc时,经常会遇到如下报错:
|
1
|
Parse error: syntax error, unexpected T_SL in php |
一段遇到该问题的原因是定界符之后空格的问题引起的。如上例中的EOT后面有空格就会报这个错。处理是否有空格还有一个小技巧。以vim为例,语法正确时,开始和结尾处的EOF会高亮显示。不高亮时,则证明语法有问题。
php中heredoc与nowdoc的使用方法的更多相关文章
- <转>php中heredoc与nowdoc的使用方法
http://www.361way.com/php-heredoc-nowdoc/3008.html 一.heredoc结构及用法 Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 ...
- php中heredoc与nowdoc的使用方法、定界符<<<的使用方法
一.heredoc结构及用法 Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义.其结构中的变量将被替换,但在 heredoc 结构中含有复杂的 ...
- heredoc 和 nowdoc
heredoc 和 nowdoc 多次使用 php nowdoc HereDoc 插入大量Hmtl都没有成功,一样提示语法有问题,事实上PHP手册注明是这样写的,实在很奇怪 最后发现了问题所在 ...
- php heredoc 与 nowdoc
php heredoc 与 nowdoc heredoc 结构 heredoc 句法结构:<<<.在该运算符之后要提供一个标识符,然后换行.接下来是字符串本身,最后要用前面定义的标识 ...
- PHP 7.3 我们将迎来灵活的 heredoc 和 nowdoc 句法结构
php.net RFC 频道已经公布了 PHP 7.3 的 Heredoc 和 Nowdoc 语法更新,此次更新专注于代码可读性: Heredoc 和 Nowdoc 有非常严格的语法,有些时候这令很多 ...
- C#中实现并发的几种方法的性能测试
C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...
- .Net中的AOP系列之《方法执行前后——边界切面》
返回<.Net中的AOP>系列学习总目录 本篇目录 边界切面 PostSharp方法边界 方法边界 VS 方法拦截 ASP.NET HttpModule边界 真实案例--检查是否为移动端用 ...
- VS2012中丢失ArcGIS模板的解决方法
VS2012中丢失ArcGIS模板的解决方法 由于ArcGIS10.0(for .NET)默认是用VS2010作为开发工具的,所以在先安装VS2012后装ArcGIS10.0 桌面版及ArcObjec ...
- 在.net中读写config文件的各种方法
阅读目录 开始 config文件 - 自定义配置节点 config文件 - Property config文件 - Element config文件 - CDATA config文件 - Collec ...
随机推荐
- zTree实现地市县三级级联DAO接口测试
zTree实现地市县三级级联DAO接口测试 ProvinceDaoTest.java: /** * @Title:ProvinceDaoTest.java * @Package:com.gwtjs.d ...
- FusionCharts报错
1.具体报错如下 SCRIPT 5007:无法获取属性"SetReturnValue"的值: 对象为空或未定义 script block(158),行1字符158 2.错误原因 3 ...
- Linux显示一个二进制文件或可执行文件的完整路径
Linux显示一个二进制文件或可执行文件的完整路径 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ which halt /sbin/halt
- BUAA软工第0次作业
第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 我在大学之前甚至连一个萌新都算不上,根本没有任何一点计算机专业的基础. 因此在进入大学之前,计算机对于我 ...
- form表单的action提交写到js中来,同时onclick事件也写在js中来。其action也可以通过ajax来提交的。
1,html脚本 <body> <div style="display: none;"> <form id="submitForm" ...
- 从“跳一跳”来看微信小程序的未来
从“跳一跳”来看微信小程序的未来 相信大家这两天都被微信新推出的小程序跳一跳刷爆了朋友圈,为了方便用户在使用过程中切换小程序,微信在这次6.6.1版本中加入了下拉可快速切换小程序的功能,而“跳一跳 ...
- CASE WHEN用法
问题:假如说这个条件有一条数据不满足,那么那条数据就不会读出来,,那么,我怎么才能把它读出并且赋值为空呢 方法: SELECT `s`.*, ( CASE THEN SUM(a.total_numbe ...
- tomcat查看端口被占用
1. tomcat有安装版和压缩版 安装版的没有关闭命令 压缩版的命令如下: tomcat关闭:catalina stop/shutdown 开启:catalina start 2. 在tomca ...
- 【BZOJ1483】【HNOI2009】梦幻布丁(启发式合并,平衡树)
[BZOJ1483][HNOI2009]梦幻布丁 题面 题目描述 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1 ...
- Invalid bound statement (not found)解决方法
项目背景:SSM框架,MySQL数据库 报错情况: 错误原因:Mybatis的xml文件中,namespace路径错误!!引入的不是对应的Dao接口!!! Dao接口和对应的xml文件 必须一一对应! ...