您的位置:首页 > 编程语言 > PHP开发

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 格式化