将变量传递给类中的heredoc对象

时间:2013-11-11 21:32:59

标签: php

我有一个这样的课程:

class main {

    private static $content;

    public function ini() {
        include 'content_a.php';
        self::$content = new $content;
    }

    public function content($snippet, $addclass=false) {
        return self::$content->snippet;
    }
}

它解析一些输入并确定要包含在ini()中的文件,该文件在每个页面加载的顶部运行一次。在此示例中,它包含content_a.php,但还有更多(content_b.phpcontent_c.php,...)。该方法将文件的内容保存到$ content属性以供content()使用,在整个脚本的其余部分中会多次调用该文件。

文件content_a.php如下所示:

class content {
    public $text = <<<FOO
    <div class="default $addclass">Hello World</div>
FOO;
}

无论是a,b还是c,它总是看起来一样 - 只有heredoc中的实际内容不同。每个文件包含多个片段;在这个例子中,只有一个($text)。

我正在渲染这样的片段:

echo $main->content('text');

......完美无缺。但是,当我尝试传递这样的参数$addclass时......

echo $main->content('text', 'bar');

...我收到错误unexpected T_VARIABLE, expecting T_END_HEREDOC。如果我将变量包装在大括号中,我会得到unexpected T_CURLY_OPEN, expecting T_END_HEREDOC

任何想法我做错了 - 还是有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:1)

在PHP中不允许在类变量中使用表达式,当它被分配给类变量时,只能在he​​redoc中使用静态内容

所以你可以使用%s而不是$ addclass然后使用sprintf替换它($ this-&gt; text,$ addClass);

答案 1 :(得分:0)

我为我的案子找到了最好的办法。 Solaiman的答案在技术上可行,但我也希望它是可扩展的,即我希望能够为不同的片段传递不同的变量。一个可能有一个额外的类而另一个,例如对于链接,可能具有动态href属性。

所以我采取了以下措施:

  • 在$ text
  • 中将$ variable替换为%% variable %%
  • 在返回$ text
  • 之前运行一个快速的str_replace()

目前,这似乎是最具扩展性和灵活性的。如果有人可以提供其他解决方案,我仍然愿意接受其他解决方案。

再次感谢Solaiman的回答。