0

我对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>标签,如果它确实有值,那么我想显示它。你知道我该如何解决这个问题吗?我一直在尝试一切,但没有任何工作!:))

4

6 回答 6

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 的结尾不能缩进。

编辑:我刚刚在你的代码中编辑了一些其他的东西,并展示了整个函数,让你有一个更好的主意。

于 2011-01-06T14:27:36.493 回答
4

我可以看到您的代码存在几个问题,但是在涉及 heredocs 语法的地方,请尝试删除ENDOFRETURN;.

于 2011-01-06T14:29:50.270 回答
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;前面没有空格

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

于 2011-01-06T14:32:41.050 回答
2

为了彻底:

NULL是一个关键字,就像:print, echo, if, for. 同时,'NULL'(注意引号)是一个字符串,就像您输入了 'if'(再次注意引号)它是一个字符串,而不是if语句的开头。

于 2011-01-06T14:51:25.610 回答
1

简单地调整

{spaces or tab}ENDOFRETURN;

{no spaces/tab}ENDOFRETURN;

rtm - 与您的问题完全相同

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

如果这条规则被破坏并且关闭标识符不是“干净的”,它将不会被视为关闭标识符,PHP 将继续寻找一个。如果在当前文件结尾之前没有找到合适的结束标识符,则在最后一行会导致解析错误。

于 2011-01-06T14:28:37.077 回答
1

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

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

还有ENDOFRETURN;在关闭你的heredoc之前不能有任何空格。

于 2011-01-06T14:33:21.207 回答