我试图在包含文件中调用一个对象的方法,其中包含的文件本身被加载到具有输出缓冲区的类中,如下所示:
public function render($file){
ob_start();
require_once($file);
$this->template = ob_get_contents();
ob_end_clean();
return $this->template;
}
获取这些错误:
Notice: Undefined variable: template
Fatal error: Call to a member function showTitle() on a non-object
包含的文件将用作模板,并且会有很多。当用作static
属性和方法集时,它可以正常工作,但不能用于实例化对象的属性和方法集,这是必需的方法。
以下是您要查看的所有测试文件。
类文件“classTest.php”:
<?php
// classTest.php
class Test{
protected $template;
protected $title = "Title";
static $titleStatic = "Title Static";
public function render($file){
ob_start();
require_once($file);
$this->template = ob_get_contents();
ob_end_clean();
return $this->template;
}
public function showTitle(){
return $this->title;
}
static function showTitleStatic(){
return self::$titleStatic;
}
}
?>
测试文件“test.php”:
<?php
// test.php
require_once 'classTest.php';
$template = new Test;
echo $template->showTitle();
$templateFile = 'includeTest.php';
echo $template->render($templateFile);
?>
包含文件“includeTest.php”:
<!-- includeTest.php -->
<div id="container">
<div id="titleStatic"><?php echo Test::showTitleStatic(); ?></div>
<div id="title"><?php echo $template->showTitle(); ?></div>
</div>
答案 0 :(得分:0)
将includeTest.php更改为:
<div id="container">
<div id="titleStatic"><?php echo Test::showTitleStatic(); ?></div>
<div id="title"><?php echo $this->showTitle(); ?></div>
</div>
你的呼叫$模板应该是$ this,因为它在课堂内而不是从外面填充。