我有一个这样的课程:
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.php
,content_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
。
任何想法我做错了 - 还是有更好的方法来做到这一点?
答案 0 :(得分:1)
在PHP中不允许在类变量中使用表达式,当它被分配给类变量时,只能在heredoc中使用静态内容
所以你可以使用%s而不是$ addclass然后使用sprintf替换它($ this-&gt; text,$ addClass);
答案 1 :(得分:0)
我为我的案子找到了最好的办法。 Solaiman的答案在技术上可行,但我也希望它是可扩展的,即我希望能够为不同的片段传递不同的变量。一个可能有一个额外的类而另一个,例如对于链接,可能具有动态href
属性。
所以我采取了以下措施:
目前,这似乎是最具扩展性和灵活性的。如果有人可以提供其他解决方案,我仍然愿意接受其他解决方案。
再次感谢Solaiman的回答。