php中heredoc和nowdoc的用法,少写echo
2017-02-07 22:51
309 查看
1.Heredoc 结构:
就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义。其结构中的变量将被替换,但在 heredoc 结构中含有复杂的变量时要格外小心。其对格式化输出内容时,比较有用 。具体其有以下特点:
1、开始标记和结束标记使用相同的字符串,通常以大写字母来写。2、开始标记后不能出现空格或多余的字符。
3、结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。
4、位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在heredoc中,变量不需要用连接符.或,来拼接 。
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>万年历</title> <style> table{ width:800px; height:300px; border-collapse:collapse; margin:100px auto; text-align:center; border:2px solid #ccf; } td,th{ border:1px dashed #f94; } </style> </head> <body> <?php $time=time(); $year=date('Y',$time); $month=date('m',$time); $days=date('t',$time); $week=time('Y-m-1',$time); $weeks=date('w',strtotime("{$year}-{$month}-1")); $w=1-$weeks; //对应本月第一天所在的星期几; echo <<<DAN <table> <th>星期日</th> <th>星期一</th> <th>星期二</th> <th>星期三</th> <th>星期四</th> <th>星期五</th> <th>星期六</th> DAN; for($i=1;$i<=$days;){ echo '<tr>'; for($j=1;$j<8;$j++){ if($i>$days || $w<=0){ echo '<td></td>'; $w++; }else{ echo "<td>$i</td>"; $i++; } } echo '</tr>'; } echo '</table>'; ?> </body> </html>
图片就不上传了,markdown不能粘贴进图片,非得上传才行。需要的同学直接复制到php文件中即可看到效果。
2. nowdoc结构及用法:
在 PHP 5.3.0 及其以后的版本中增加了nowdoc结构,其用法和heredoc相同,不同的是Nowdoc 结构是类似于单引号字符串的。nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<’EOT’。
例如:now结构中复杂变量的示例
<?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; ?>
其输出为:
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
3、报错解决方案:
在使用heredoc和nowdoc时,经常会遇到如下报错:Parse error: syntax error, unexpected T_SL in php
一段遇到该问题的原因是定界符之后空格的问题引起的。如上例中的EOT后面有空格就会报这个错。处理是否有空格还有一个小技巧。以vim为例,语法正确时,开始和结尾处的EOF会高亮显示。不高亮时,则证明语法有问题。
相关文章推荐
- PHP中heredoc和nowdoc的用法
- php 字符串heredoc结构和nowdoc结构的区别
- php中heredoc, nowdoc两种界定字符串
- PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别
- Php中heredoc与nowdoc的使用方法
- PHP中heredoc的用法(注意事项!)
- php中 echo&amp;lt;&amp;lt;&amp;lt; 的用法的实例:
- php中heredoc与nowdoc的使用方法
- php中heredoc与nowdoc的使用方法
- php中echo(),print(),print_r()用法
- php 中的heredoc与nowdoc的区别
- PHP heredoc 用法
- PHP中nowdoc和heredoc使用需要注意的一点
- php function用法如何递归及return和echo区别
- PHP基础温习之echo print printf sprintf print_r var_dump的用法与区别
- PHP定界符两种方式Heredoc和Nowdoc
- PHP echo,print,printf,sprintf函数之间的区别与用法详解
- php heredoc用法注意事项
- php中heredoc与nowdoc的使用方法
- php heredoc 与 nowdoc