2010-06-10 3 views
0
<?php 
     $output = <<< END 
     <table style="display: table;" class="listview rowstyle-rowhighlight" id="resourcegrid"> 
      <thead> 
      <tr> 
       <th width="70"></th> 
       <th style="-moz-user-select: none;" class="sortable fd-column-0"><a class="fdTableSortTrigger" href="#">Name</a></th> 
       <th style="-moz-user-select: none;" class="sortable fd-column-1"><a class="fdTableSortTrigger" href="#">Contributor</a></th> 
       <th style="-moz-user-select: none;" class="sortable fd-column-3"><a class="fdTableSortTrigger" href="#">Modified</a></th> 
      </tr> 
      </thead><tbody> 
END; 

echo $output; 

Когда я бегу он сообщает:возникают проблемы при использовании синтаксиса Heredoc в PHP

Parse error: parse error on line 2 

Но я не вижу ничего ненормального.

+0

Является ли токен END фактически в столбце 1? – staticsan

+0

Да, это в столбце 1 – wamp

ответ

5

Я считаю, что проблема в том, что вы должны использовать $output = <<<END вместо $output = <<< END (Обратите внимание на отсутствие пространства)

echo <<<END 
heredoc string... 
END; 

Убедитесь, что нет никакого места до или после того, как END даже одно постороннее пространство может вызвать проблемы. Глядя на код, который вы опубликовали, у вас, кажется, есть место до и после END.

От php website:

Предупреждение

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

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

2

Это должно быть <<<END (без пробела).

Пример:

<?php 
    echo <<<END 
Heredoc string. 
END; 
+0

Пробовал, по-прежнему та же ошибка – wamp

+0

@wamp http://codepad.viper-7.com/TazuD9 – Artefacto

1

Использование следующих действий на моем localhost не вызывает ошибок.

<?php 
     $output = <<<END 
     <table style="display: table;" class="listview rowstyle-rowhighlight" id="resourcegrid"> 
      <thead> 
      <tr> 
       <th width="70"></th> 
       <th style="-moz-user-select: none;" class="sortable fd-column-0"><a class="fdTableSortTrigger" href="#">Name</a></th> 
       <th style="-moz-user-select: none;" class="sortable fd-column-1"><a class="fdTableSortTrigger" href="#">Contributor</a></th> 
       <th style="-moz-user-select: none;" class="sortable fd-column-3"><a class="fdTableSortTrigger" href="#">Modified</a></th> 
      </tr> 
      </thead><tbody> 
END; 

Как и другие упоминаемые, я просто избавился от пространства.

Смежные вопросы