尝试使一个简单的模板系统工作,但它似乎影响另一个类。
我有两个PHP类,都在index.php中调用:
当我调用HeaderData类,然后手动 require()
视图中的模板文件(即包含doctype,head,meta标签等)时,来自header类的代码可以正常工作模板文件,从标题类输出对象,如Doctype等。
但是,当我尝试使用PagesTemplate类来包含模板文件(从index.php中删除手动require()
)时,会包含模板文件,但HeaderData类不再适用于它。登记/>
错误日志显示:
当在index.php中手动require()
模板文件时,变量和函数都工作正常。
以下代码仅限dev(要添加的数据检查等):
index.php:
// Use HeaderData Class
$varHeaderData = new HeaderData(
array(
'PageDoctype' => '<!DOCTYPE html>',
'PageCharset' => 'UTF-8',
));
// Use PageTemplates Class
$varPageTemplate = new PageTemplates();
$varPageTemplate->LoadTemplate('template-file.php');
PageTemplates.php类:
class PageTemplates
{
private $strTemplatesDir = 'view/templates/';
public function __construct($strTemplatesDir = NULL)
{
if ( is_dir($strTemplatesDir) )
{
$this->strTemplatesDir = $strTemplatesDir;
}
}
public function LoadTemplate($strTemplateFile)
{
{
require_once ($this->strTemplatesDir.$strTemplateFile);
}
}
}
template-file.php:
echo $varHeaderData->PageDoctype();
HeaderData类只是在类中使用PageDoctype()
函数设置用户在数组中输入的对象(再次在没有页面模板类的情况下工作正常)
有人可以告诉我为什么在使用模板类require()
模板文件时,它会阻止HeaderData中的对象在template-file.php中工作吗?
答案 0 :(得分:1)
最简单的方法是将变量作为数组传递给LoadTemplate
方法并使用extract
函数:
public function LoadTemplate($strTemplateFile, $vars = array())
{
extract($vars);
require($this->strTemplatesDir.$strTemplateFile);
}
在index.php中
...
$varPageTemplate->LoadTemplate('template-file.php', array(
'varHeaderData' => $varHeaderData
));
您的一个错误是:“在非对象上调用成员函数PageDoctype()”,因此请确保在PageDoctype()
类中定义了HeaderData
方法。