在PHP中使用heredoc语法时遇到麻烦

时间:2010-06-10 02:56:00

标签: php heredoc

<?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;

当我运行它时报告:

Parse error: parse error on line 2

但我没有看到任何异常。

3 个答案:

答案 0 :(得分:5)

我认为问题是您应该使用$output = <<<END代替$output = <<< END(请注意缺少空间)

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

确保END之前或之后没有空格,即使是一个无关的空间也可能导致问题。查看您发布的代码,您似乎在END之前和之后都有空格。

来自php website

  

警告

     

非常重要的是要注意到   具有结束标识符的行必须   不包含其他字符   可能是分号(;)。这意味着   特别是标识符可能不会   缩进,可能没有   在之前或之后的空格或制表符   分号。这也很重要   意识到第一个角色   在结束标识符之前必须   由本地定义的换行符   操作系统。这是UNIX上的\ n   系统,包括Mac OS X.   关闭分隔符(可能跟随   必须遵循分号   换行。

     

如果此规则被破坏并结束   标识符不是“干净”,它不会   被视为结束标识符,   PHP将继续寻找一个。   如果没有正确的结算标识符   在当前结束之前发现   文件,将导致解析错误   最后一行。

答案 1 :(得分:2)

它应该是<<<END(没有空格)。

示例:

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

答案 2 :(得分: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;

像其他提到的那样,我只是摆脱了空间。