Template类阻止另一个类工作

时间:2014-03-03 20:33:25

标签: php class templates

尝试使一个简单的模板系统工作,但它似乎影响另一个类。

我有两个PHP类,都在index.php中调用:

  • HeaderData.php - 类允许用户设置标题数据,例如doctype, 字符集。
  • PageTemplates.php - 类允许用户包含模板文件。

当我调用HeaderData类,然后手动 require()视图中的模板文件(即包含doctype,head,meta标签等)时,来自header类的代码可以正常工作模板文件,从标题类输出对象,如Doctype等。

但是,当我尝试使用PagesTemplate类来包含模板文件(从index.php中删除手动require())时,会包含模板文件,但HeaderData类不再适用于它。登记/> 错误日志显示:

  • 注意:“未定义变量varHeaderData”;
  • 错误:“在非对象上调用成员函数PageDoctype()”;

当在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中工作吗?

1 个答案:

答案 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方法。