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

时间:2012-06-28 23:45:03

标签: php include scope

我正在尝试构建一个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; ?>

我的问题是:我怎样才能完成直接在原始方法中包含模板的行为,同时仍然使用辅助方法来实际执行“繁重的工作”?我真的很感谢任何帮助你可以给!

1 个答案:

答案 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()之前对其进行过滤,但它应该有效。