проблема с синтаксисом heredocs? - PullRequest
0 голосов
/ 06 января 2011

У меня проблема с синтаксисом для 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 ]

5 голосов
/ 06 января 2011

Если данные в базе данных 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 должен быть , а не .идея.

4 голосов
/ 06 января 2011

Я вижу несколько проблем с вашим кодом, но в том, что касается синтаксиса heredocs, попробуйте удалить пробелы перед ENDOFRETURN;.

2 голосов
/ 06 января 2011

Ради тщательности:

NULL - это ключевое слово, например: print, echo, if, for. Между тем, «NULL» (обратите внимание на кавычки) - это строка, как если бы вы ввели «if» (обратите внимание на кавычки, опять же), это будет строка, а не начало оператора if.

2 голосов
/ 06 января 2011

Есть несколько проблем, правильный путь будет выглядеть примерно так:

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; не имеет пробелов перед ним

  • все выходные данные возвращаются в одном ... return

1 голос
/ 06 января 2011

Ваш эхо-оператор в одинарных кавычках, как указано выше, не будет делать то, что вы намеревались.Переменная $ image не будет раскрываться в строке в одинарных кавычках.Поменяйте местами одинарные и двойные кавычки вместо

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

Также ENDOFRETURN;при закрытии вашего heredoc не должно быть пробелов перед ним.

1 голос
/ 06 января 2011

просто настройте

{spaces or tab}ENDOFRETURN;

на

{no spaces/tab}ENDOFRETURN;

rtm - точно такая же проблема, как у вас

Это очень важноотметить, что строка с закрывающим идентификатором не должна содержать других символов, кроме, возможно, точки с запятой (;).В частности, это означает, что идентификатор не может иметь отступ, и не должно быть пробелов или табуляции до или после точки с запятой.Также важно понимать, что первый символ перед закрывающим идентификатором должен быть символом новой строки, как это определено локальной операционной системой.Это \ n в системах UNIX, в том числе в Mac OS X. После закрывающего разделителя (возможно, после точки с запятой) также должна стоять новая строка.

Если это правило нарушено и закрывающий идентификатор не «чистый»", он не будет считаться закрывающим идентификатором, и PHP продолжит его поиск.Если надлежащий закрывающий идентификатор не найден до конца текущего файла, в последней строке возникнет ошибка синтаксического анализа.

...