php中heredoc与nowdoc的区别

一、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比较好些。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值