【问题标题】:Heredoc syntax errorHeredoc语法错误
【发布时间】:2012-01-04 01:44:38
【问题描述】:

对于 mediawiki 皮肤,我收到以下代码的错误

    private $_sideboxf = <<<EOD
        <h3>%s</h3>
        <ul class="submenu">
            %s
        </ul>
EOD;

错误是 syntax error, unexpected T_START_HEREDOC 。我检查了语法,但我不知道出了什么问题。当我在 git 上询问时,即使代码的作者也不明白为什么我会收到此错误。

编辑:类定义

class SkinTemplate extends QuickTemplate
{
    private $_sideboxf = <<<EOD
    <h3>%s</h3>
    <ul class="submenu">
        %s
    </ul>
EOD;
// Some public function
} // End of Class

【问题讨论】:

  • Heredocs apparently don't work in classes. 我想只使用单引号。
  • 你在这句话之前有什么?
  • @minitech:我不得不使用这个必要的邪恶来升级谷歌地图。将 JS 代码放在一个类中是令人讨厌的,但它确实提供了 OOP 的好处,因为 JS 现在位于一个集中位置。

标签: php mediawiki


【解决方案1】:

使用 heredoc 初始化类变量需要 PHP5.3.0+,您的代码在 PHP 5.3 中运行良好

【讨论】:

  • Mediawiki 1.17.0 有 PHP 版本 5.2.9
  • 这就是问题所在,OP 中的代码看起来可以编译。已经在 5.3.x 上这么久了,很难想象其他人不是。
  • 我刚打电话给我的共享主机提供商,他们要求我以 40 美元/月的价格购买一个 VPS 帐户,因为他们在经过验证的稳定版本自行建立之前没有升级计划。我想我要搬家了。
  • 哇,目前的稳定版是 5.3.8 而不是 5.2.9 。 PHP 5.3.0 于 2009 年发布 ^^
【解决方案2】:

你真的想在成员变量初始化期间做这个heredoc吗?也许更好的路线是这样的:

class MyClass 
{
    public function getSideBoxF()
    {
        return <<<EOD
            Stuff goes here...
EOD;

    }
}

还请注意,结束的 HEREDOC 必须与左边距齐平,我添加了类包装器以向您展示它应该是什么样子。

【讨论】:

    【解决方案3】:

    heredoc 的结束标签真的缩进了吗?

    IIRC 的结果不太好……

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 2012-06-27
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2011-07-25
      • 2020-06-11
      • 2015-03-14
      相关资源
      最近更新 更多