php中heredoc和nowdoc的用法,少写echo

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会高亮显示。不高亮时,则证明语法有问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SHUIPING_YANG

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值