我目前正在创建一个框架,仅仅是为了个人学习项目,即能够在未来通常评估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();
?>
答案 0 :(得分:0)
通常,模板类还会为模板提供其他值。 E.g:
public function render(array $vars) {
extract($vars);
require $this->template;
}
或者模板可以使用$this->..
来访问属于该类的其他方法/对象/值/服务。如果你在课外进行require
,这一切都不可能。然后仅全局变量可用于模板,您希望其中没有(不要使用global
)。在方法中完成所有这些操作后,您可以执行extract($vars)
之类的操作,而不会使全局范围混乱。
此外,您现在需要执行$template->render()
,而不是对require $template->render()
的完全自包含的调用,这首先否定了编写课程的重点;来电者仍然在做所有工作,而班级本身基本上没有(不能)做任何事情。