在PHP中通过helper方法访问包含文件中的变量

在PHP中通过helper方法访问包含文件中的变量,php,include,scope,Php,Include,Scope,我正在尝试构建一个php类,它将允许我包含其他要显示的php“模板”文件。我希望调用它的范围内的所有变量都可以在包含的文件中使用。这里有一个问题,我想把实际的include传递给一个helper方法,以保持代码干燥。以下是我到目前为止的情况: /* TemplateLoader.php */ class TemplateLoader { public function foo() { $var = "FOO!"; //Works include 'template.p

我正在尝试构建一个php类,它将允许我包含其他要显示的php“模板”文件。我希望调用它的范围内的所有变量都可以在包含的文件中使用。这里有一个问题,我想把实际的include传递给一个helper方法,以保持代码干燥。以下是我到目前为止的情况:

/* 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; ?>
/*TemplateLoader.php*/
类模板装载器{
公共功能foo(){
$var=“FOO!”;
//工作
包括“template.php”;
}
公共功能条(){
$var=“BAR!”;
//不起作用
$this->render(“模板”);
}
私有函数render($name){
包括$name.'.php';
}
}
/*template.php*/

我的问题是:如何在仍然使用helper方法实际执行“繁重任务”的情况下,实现在原始方法中直接包含模板的行为?我非常感谢您提供的任何帮助

这是我第一次想到的——我不确定我是否太喜欢它,但我不确定是否有通用的替代品。这将使用捕获所有当前变量,并将它们传递到
render()
,在那里对它们进行编辑,从而可由包含的文件访问

在将返回传递到
render()
之前,您可能会过滤来自的返回,但我应该可以工作

public function bar() {
    $var = "BAR!";
    $this->render("template", get_defined_vars());
}

private function render( $name, &$vars) {
    extract( $vars);
    include $name . '.php';
}

在将返回传递到
render()
之前,您可能会从
get\u defined\u vars()
过滤返回,但它应该可以工作

这正是我想要的。我以前甚至不知道get_defined_vars()函数。
public function bar() {
    $var = "BAR!";
    $this->render("template", get_defined_vars());
}

private function render( $name, &$vars) {
    extract( $vars);
    include $name . '.php';
}