我正在尝试构建一个php类,它将让我包含其他php“模板”文件来显示。我希望调用范围内的所有变量都可以在包含的文件中使用。这是捕获,我想把实际的包括传递给一个帮助方法来保持代码DRY。以下是我到目前为止的情况:
/* TemplateLoader.php */
class TemplateLoader {
public function foo() {
$var = "FOO!";
//Works
include 'template.php';
}
public function bar() {
$var = "BAR!";
//Doesn't work
$this->render("template");
}
private function render( $name ) {
include $name . '.php';
}
}
/* template.php */
<?php echo $var; ?>
我的问题是:我怎样才能完成直接在原始方法中包含模板的行为,同时仍然使用辅助方法来实际执行“繁重的工作”?我真的很感谢任何帮助你可以给!
答案 0 :(得分:2)
这是我首先想到的 - 我不确定我是否喜欢它,但我不确定是否有一个通用的选择。这会使用get_defined_vars()
捕获所有当前变量,并将它们传递给render()
,它们是extract()
,因此可以通过包含的文件进行访问。
您可以在将get_defined_vars()
传递给render()
之前对其进行过滤,但我应该会这样做。
public function bar() {
$var = "BAR!";
$this->render("template", get_defined_vars());
}
private function render( $name, &$vars) {
extract( $vars);
include $name . '.php';
}
您可以在将get_defined_vars()
传递给render()
之前对其进行过滤,但它应该有效。