什么是heredoc和nowdoc

来源:互联网 发布:最优化方法第二版pdf 编辑:程序博客网 时间:2024/05/21 19:32

一、heredoc结构及用法

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中会自动替换其中的$变量,将命令和输入放在一块
这里,就不用像普通的php写法那样,echo “” echo “……” ,这样不但看上去舒服易读,而且也省去了每行双引号的引用。
再给出一个变量引用的例子:

<?php$name = 'coder__leslie的博客';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 的 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。
一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<’EOT’。
例如:now结构中复杂变理的示例

<?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;?>其输出为: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时,经常会遇到如下报错:

Parse error: syntax error, unexpected T_SL in php

一段遇到该问题的原因是定界符之后空格的问题引起的。如上例中的EOT后面有空格就会报这个错。处理是否有空格还有一个小技巧。以vim为例,语法正确时,开始和结尾处的EOF会高亮显示。不高亮时,则证明语法有问题。

0 0
原创粉丝点击