php中heredoc与nowdoc的区别

来源:互联网 发布:java枚举类型定义常量 编辑:程序博客网 时间:2024/05/21 11:01
一、heredoc结构及用法

  Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义。其结构中的变量将被替换,但在 heredoc 结构中含有复杂的变量时要格外小心。其对格式化输出内容时,比较有用 。具体其有以下特点:

1、开始标记和结束标记使用相同的字符串,通常以大写字母来写。

2、开始标记后不能出现空格或多余的字符。

3、结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。

4、位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。

5.  在heredoc中,变量不需要用连接符.或,来拼接 。

heredoc中的PHP变量建议使用{$name->change()} 大括号括起来,这样可以避免一定的歧义,如果要原样输出可以使用传说中的转义字符 \ ,转义字符本身可以使用转义字符进行输出,即 \ 这种表示方法,大括号之类的这些都需要转义输出。示例如下:

$this->html = <<<EOT          <div id="master-carousel" class="carousel slide" data-ride="carousel">            <ol class="carousel-indicators">              <li data-target="#master-carousel" data-slide-to="0" class="active"></li>              <li data-target="#master-carousel" data-slide-to="1"></li>              <li data-target="#master-carousel" data-slide-to="2"></li>            </ol>            <div class="carousel-inner" role="listbox">                {$str}            </div>            <a class="left carousel-control" href="#master-carousel" role="button" data-slide="prev">              <span class="glyphicon glyphicon-chevron-left"></span>              <span class="sr-only">Previous</span>            </a>            <a class="right carousel-control" href="#master-carousel" role="button" data-slide="next">              <span class="glyphicon glyphicon-chevron-right"></span>              <span class="sr-only">Next</span>            </a>          </div>          <style>            .carousel-control{              display:none;            }            .carousel-indicators li {              background-color:rgba(86, 61, 24, 0);              border: 1px solid #563d7c;            }            .carousel-indicators li.active {              background-color: #FFF;            }            </style>          <script>            $('#master-carousel').carousel({                //interval:3000,                interval:false,                wrap:true            });          </script>EOT;


二、nowdoc结构及用法
在 PHP 5.3.0 及其以后的版本中增加了nowdoc结构,其用法和heredoc相同,只是其中的内容绝对不会进行任何的转义和解释,是什么内容就是什么内容,不会解析PHP相关的内容。
不同的是Nowdoc 结构是类似于单引号字符串的。nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。
一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<'EOT'。


三、总结:
1、 heredoc是从PHP4.0开始引进的,而nowdoc语法则需要5.3版本。
2、heredoc使用 <<< EOT 的标示符,而nowdoc使用 <<< 'EOT' 这样的标示符。
3、heredoc是动态的 ,nowdoc是静态的。
4、heredoc类似多行的双引号, newdoc类似多行的单引号
5、heredoc是一种专门处理大段字符串的通用处理方案,而nowdoc是php为了弥补动态实现“heredoc”的效率问题而实现的“高效率”的静态版本。
6、最后强调一下,因为PHP5.3才引进的nowdoc语法,很多云托管坏境很有可能不支持导致程序崩溃。而且heredoc包含了nowdoc的功能,所以个人建议还是使用heredoc比较好些。



原创粉丝点击