【问题标题】:Accessing variables in included file through helper method in PHP通过 PHP 中的辅助方法访问包含文件中的变量
【发布时间】:2012-06-28 23:45:03
【问题描述】:

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

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

【问题讨论】:

    标签: php include scope


    【解决方案1】:

    这是我首先想到的——我不确定我是否喜欢它,但我不确定是否有通用的替代方案。这将使用get_defined_vars() 捕获所有当前变量,并将它们传递给render(),它们是extract()ed,因此可以被包含的文件访问。

    您可以在将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() 之前过滤它,但它应该可以工作。

    【讨论】:

    • 这正是我想要的。我以前从不知道 get_defined_vars() 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多