heredocs语法有问题吗?

时间:2011-01-06 14:24:53

标签: php html image heredoc

我对heredoc的语法有疑问。让我先说一下代码:

    function format($user_id,$user_note,$image,$dt){

        //this is the problem
      if($image=='NULL'){
     //don't display image
     }

     else {
  echo '<img src="userpics/$image" width="480" height="480">';
}
         return <<<ENDOFRETURN
       <div class ="commentbox">
                         $date
                         </div>
                             <div class="leftpanel">

                           $user_note
                        $image
                                 <div class="date">
                                    $rel
                                 </div>
                             </div>
    ENDOFRETURN;

}

$image变量来自数据库,它是NULL或具有文件名。如果图像为空,我不想显示<img>标签,如果它有值,那么我想显示它。你知道我怎么解决这个问题吗?我一直在尝试一切,但没有任何工作呢! :))

6 个答案:

答案 0 :(得分:5)

如果MySQL数据库中的数据为NULL,您可以使用is_null()函数检查,而不是与字符串'NULL'进行比较:

function format($user_id,$user_note,$image,$dt)
{
  if(!is_null($image)){
     $image = "<img src=\"userpics/$image\" width=\"480\" height=\"480\">";
  }
  return <<<ENDOFRETURN
   <div class ="commentbox">$date</div>
   <div class="leftpanel">
     $user_note
     $image
     <div class="date">$rel</div>
   </div>
ENDOFRETURN;
}

此外,正如其他人所提到的,heredoc的结尾必须缩进。

编辑:我刚刚在您的代码中编辑了其他一些内容,并展示了整个功能,以便您更好地了解。

答案 1 :(得分:4)

我可以看到您的代码存在一些问题,但是就heredocs语法而言,请尝试删除ENDOFRETURN;之前的空格。

答案 2 :(得分:2)

有几个问题,正确的方法是:

function format($user_id,$user_note,$image,$dt){

    //this is the problem
    if($image !== NULL){
        $output .= '<img src="userpics/' . $image . '" width="480" height="480">';
    }
    $output .= <<<ENDOFRETURN
    <div class ="commentbox">
                     $date
                     </div>
                         <div class="leftpanel">

                       $user_note
                    $image
                             <div class="date">
                                $rel
                             </div>
                         </div>
ENDOFRETURN;

    return $output;
}
你知道了:

  • ENDOFRETURN;之前没有空格

  • 所有输出都返回一个...返回

答案 3 :(得分:2)

为了彻底:

NULL是一个关键字,就像:printechoiffor。同时,'NULL'(注意引号)是一个字符串,就像你键入'if'(再次注意引号)一样,它将是一个字符串,而不是if语句的开头。

答案 4 :(得分:1)

只需调整

即可
{spaces or tab}ENDOFRETURN;

{no spaces/tab}ENDOFRETURN;

rtm - exactly same problem as yours

  

非常重要的是要注意,带有结束标识符的行必须不包含其他字符,除了可能是分号(;)。这尤其意味着标识符可能没有缩进,并且在分号之前或之后可能没有任何空格或制表符。同样重要的是要认识到结束标识符之前的第一个字符必须是本地操作系统定义的换行符。这是在UNIX系统上的\ n,包括Mac OS X.结束分隔符(可能后面跟一个分号)后面也必须跟一个换行符。

     

如果此规则被破坏且结束标识符不是“干净”,则不会将其视为结束标识符,PHP将继续查找。如果在当前文件结束之前未找到正确的结束标识符,则将在最后一行产生解析错误。

答案 5 :(得分:1)

如上所述,单引号中的echo语句不会按照您的意图执行。变量$ image不会在单引号字符串中展开。将您的单引号和双引号反转为

echo "<img src='userpics/$image' width='480' height='480'>";

也是ENDOFRETURN;关闭你的heredoc时,不得有任何空格。