echo和print的区别 理解print <<< EOT和echo <<< EOT

本文来自小屋sjolzy.cn【原创】

echo可以同时输出多个字符串,并不需要圆括号。
print只可以同时输出一个字符串,需要圆括号。
print的用法和C语言很像,所以会对输出内容里的%做特殊解释。    
echo无返回值,print()有返回值,当其执行失败(比如断线)时返回flase 。
echo可以多个参数,print一个参数。推荐用echo。

看下面的例子就能明白php中print <<<EOT是干什么用的了:
***********************
print <<<EOT
<html>
<head></head>
<body>
$value;
<img src="$img">
...
</body>
<html>
EOT;

************************
含义:
<<< 运算符,将由自定义分界符间的内容视为字符串,可对其间的变量做处理;
EOT 自定义分界符,结束时必须位于行首;
在同一页面中使用<<<标记
标记;
注:标记名为配对出现,同一页面中不允许同名出现两个以上标记名;
另:配对标记名的结尾标记名应单独一行,前后均不允许输出字符...(例如空格等不可见但存在的字符..)。
优点:这样可以输出大段的HTML 而且不用把里面的引号转义 就是不用 \" 这样自动替换里面的变量。

PHP自动生成月历代码

<?php
function calendar($MM,$YYYY)
{
if($MM=="") $MM = date("m");
if($YYYY=="") $YYYY = date("Y");
if(checkdate($MM,1,$YYYY)){
$stringDate = strftime("%d %b %Y",mktime (0,0,0,$MM,1,$YYYY));
$days = strftime("%d",mktime (0,0,0,$MM+1,0,$YYYY));
$firstDay = strftime("%w",mktime (0,0,0,$MM,1,$YYYY));
$lastDay = strftime("%w",mktime (0,0,0,$MM,$days,$YYYY));
$printDays = $days;
$preMonth = strftime("%m",mktime (0,0,0,$MM-1,1,$YYYY));
$preYear = strftime("%Y",mktime (0,0,0,$MM-1,1,$YYYY));
$nextMonth = strftime("%m",mktime (0,0,0,$MM+1,1,$YYYY));
$nextYear = strftime("%Y",mktime (0,0,0,$MM+1,1,$YYYY));
print("<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\">");
print("<tr><th valign=\"top\"><a href=\"".$_SERVER['PHP_SELF']."?NB=".$_GET["NB"]."&MM=".$preMonth."&YY=".$preYear."\">P</a></th>");
print("<th colspan=\"5\" valign=\"top\">".strftime("%b %Y",mktime (0,0,0,$MM,1,$YYYY))."</th>");
print("<th valign=\"top\"><a href=\"".$_SERVER['PHP_SELF']."?NB=".$_GET["NB"]."&MM=".$nextMonth."&YY=".$nextYear."\">N</a></th></tr>");
print("<tr style=\"font-family: Verdana; font-size:x-small\">");
print("<th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>");
$currentDays = 1;
for($a=1;$a<=5;$a++){
print("<tr align=\"left\" valign=\"top\" style=\"font-family: Verdana; font-size:x-small\">");
$diffDays = $firstDay-$lastDay;
if($firstDay>$lastDay && $currentDays ==1 && ($diffDays<>1)){
for($x=$lastDay;$x>=0;$x--){
$printDays = $days-$x;
print("<td>$printDays</td>");
}
for($z=1;$z<$firstDay-$lastDay;$z++){
print("<td>&nbsp;</td>");
}
for($y=$firstDay;$y<7;$y++){
print("<td>$currentDays</td>");
$currentDays++;
}
}
elseif($firstDay!=0 && $currentDays==1){
for($z=1;$z<=$firstDay;$z++){
print("<td>&nbsp;</td>");
}
for($y=$firstDay;$y<7;$y++){
print("<td>$currentDays</td>");
$currentDays++;
}
}
else {
for($u=1;$u<=7 && $currentDays<=$days;$u++){
print("<td>$currentDays</td>");
$currentDays++;
}
}
print("</tr>");
}
print("</table>");
}
}

echo calendar(09,2008);
?>