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
<?php
function  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 string
spanning multiple lines
using 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' : x41
EOT;
?>

其输出为:

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会高亮显示。不高亮时,则证明语法有问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值