PHP模板包含在全局范围之外

时间:2016-02-22 16:00:23

标签: php frameworks

我目前正在创建一个框架,仅仅是为了个人学习项目,即能够在未来通常评估php框架。随着我开始对某些框架进行更多的欣赏,特别是关于他们设计模块的方式,并在他们的范围内提供它们的范围,在这个项目的开发过程中,我&#39 ; m也感到困惑,为什么几乎所有框架开发人员都在其类的范围内包含(视图)模板。

也许有些开发人员漫游这些董事会,能够对此有所建设性。

一个例子(为了清楚起见非常简单)。

为什么这样做......

<?php

class TemplateInc {

    public $template;

    public function __construct($page) {

        $this->template = $page;
    }

    public function render() {

        require_once $this->template;
    }
}

$template_include = new TemplateInc('mypage.html');
$template_include->render();

?>

...当它也可以像这样做时,同时能够在模板中使用全局范围变量(如果适用)?

<?php

class TemplateName {

    public $template;

    public function __construct($page) {

        $this->template = $page;
    }

    public function getTemplate() {

        return $this->template;
    }
}

$templatename = new TemplateName('mypage.html');
require_once $templatename->getTemplate();

?>

1 个答案:

答案 0 :(得分:0)

通常,模板类还会为模板提供其他值。 E.g:

public function render(array $vars) {
    extract($vars);
    require $this->template;
}

或者模板可以使用$this->..来访问属于该类的其他方法/对象/值/服务。如果你在课外进行require,这一切都不可能。然后全局变量可用于模板,您希望其中没有(不要使用global)。在方法中完成所有这些操作后,您可以执行extract($vars)之类的操作,而不会使全局范围混乱。

此外,您现在需要执行$template->render(),而不是对require $template->render()的完全自包含的调用,这首先否定了编写课程的重点;来电者仍然在做所有工作,而班级本身基本上没有(不能)做任何事情。