【发布时间】:2023-04-06 18:37:01
【问题描述】:
试图让一个简单的模板系统工作,但它似乎影响了另一个类。
我有两个 PHP 类,都在 index.php 中调用:
- HeaderData.php - 类允许用户设置 Header 数据,例如 doctype, 字符集。
- PageTemplates.php - 类允许用户包含模板文件。
当我调用 HeaderData 类时,手动 require() 视图中的模板文件(即包含 doctype、head、meta 标签等),来自 header 类的代码在模板中工作正常文件,从头类输出对象,如Doctype等。
但是,当我尝试使用 PagesTemplate 类来包含模板文件时(从 index.php 中删除了手动 require()),模板文件被包含在内,但 HeaderData 类不再在其中工作。
错误日志显示:
- 注意:“未定义变量 varHeaderData”;
- 错误:“在非对象上调用成员函数 PageDoctype()”;
手动require() index.php 中的模板文件时,变量和函数都可以正常工作。
以下代码仅供开发人员使用(待添加数据检查等):
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);
}
}
}
模板文件.php:
echo $varHeaderData->PageDoctype();
HeaderData 类只是使用类中的PageDoctype() 函数设置用户在数组中输入的对象(同样,这在没有页面模板类的情况下也可以正常工作)
谁能告诉我为什么当使用模板类require() 模板文件时,它会阻止来自 HeaderData 的对象在 template-file.php 中工作?
【问题讨论】:
-
当您在
LoadTemplate方法中需要一个文件时,它不会看到$varHeaderData,因为它在不同的范围内。 -
@barell 我尝试了在模板类中使用
ob_start()/flush()等的各种方法,然后在index.php 中围绕对象调用。我尝试的一切都阻止了 HeaderData 类在模板文件中的工作。那么我该如何解决这个范围问题呢?