在 PHP 中使用 Heredoc 语法时遇到问题

发布于 2024-09-05 14:15:46 字数 926 浏览 4 评论 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;

当我运行它时报告:

Parse error: parse error on line 2

但我没有看到任何异常。

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

When I run it reports :

Parse error: parse error on line 2

But I don't see anything abnormal.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

像你 2024-09-12 14:15:46

我认为问题是您应该使用 $output = << 而不是 $output = <<< END (注意缺少空格)

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

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

来自 php 网站

警告

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

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

I believe the problem is that you should use $output = <<<END instead of $output = <<< END (Note the lack of space)

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

Make sure that there is no space before or after the END even a single extraneous space could cause problems. Looking at the code you posted, you seem to have a space before and after the END.

From the php website:

Warning

It is very important to note that the
line with the closing identifier must
contain no other characters, except
possibly a semicolon (;). That means
especially that the identifier may not
be indented, and there may not be any
spaces or tabs before or after the
semicolon. It's also important to
realize that the first character
before the closing identifier must be
a newline as defined by the local
operating system. This is \n on UNIX
systems, including Mac OS X. The
closing delimiter (possibly followed
by a semicolon) must also be followed
by a newline.

If this rule is broken and the closing
identifier is not "clean", it will not
be considered a closing identifier,
and PHP will continue looking for one.
If a proper closing identifier is not
found before the end of the current
file, a parse error will result at the
last line.

偏爱你一生 2024-09-12 14:15:46

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

例子:

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

It should be <<<END (without space).

Example:

<?php
    echo <<<END
Heredoc string.
END;
满天都是小星星 2024-09-12 14:15:46

在我的本地主机上使用以下内容不会输出任何错误。

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

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

Using the following on my localhost outputs no errors.

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

Like others mentioned, I simply got rid of the space.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文