丢失包含文件中对象的范围

时间:2018-04-19 23:04:18

标签: php class oop object static

我试图在包含文件中调用一个对象的方法,其中包含的文件本身被加载到具有输出缓冲区的类中,如下所示:

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>

1 个答案:

答案 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,因为它在课堂内而不是从外面填充。