1

我正在尝试构建一个 php 类,它可以让我包含其他要显示的 php“模板”文件。我希望调用它的范围内的所有变量都可以在包含的文件中使用。这是关键,我想将实际包含传递给辅助方法以保持代码干燥。这是我到目前为止所拥有的:

/* 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; ?>

我的问题是:我如何才能完成将模板直接包含在原始方法中的行为,同时仍然使用辅助方法来实际执行“繁重的工作”?我非常感谢您能提供的任何帮助!

4

1 回答 1

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(),但它应该可以工作。

于 2012-06-28T23:48:50.427 回答