php - 调用非对象的成员函数

标签 php class function

我有一个模板类,它既可以解析 TPL 文件中的数组变量,也可以简单地显示纯 HTML 文件。解析函数工作正常,但显示函数返回以下错误:

“ fatal error :在第 7 行 C:\xampp\htdocs\clancms\controllers\home.php 中的非对象上调用成员函数 display()”

这是 home.php

class Home extends Controller {

    function index(){

        echo $this->template->display('index_body.tpl');
    }

}

这是模板类

class Template {

    var $file = '';
    var $vars = '';
    var $themeID = '';
    var $themeTitle = '';
    var $themeDescription = '';
    var $themePath = '';


    function getTheme(){

        if($_SESSION['memberid'] != NULL){

            $query = "
                SELECT memberid, themeid
                FROM members
                WHERE memberID = '".$_SESSION['memberID']."
                LIMIT 1";

            if($query = mysql_query($query)){
                $member = mysql_fetch_assoc($query);


                $query = "
                    SELECT themeID, themeTitle, themeDescription, themePath
                    FROM {DB_PREF} 
                    WHERE themeID = ".$member['themeID']."
                    LIMIT 1";

                if($query = mysql_query($query)){
                    $theme = mysql_fetch_assoc($query);
                    $this->themeID = $theme['themeID'];
                    $this->themePath = BASE_PATH.'/templates/'.$theme['themePath'];
                    $this->themeTitle = $theme['themeTitle'];
                    $this->themeDescription = nl2br(htmlspecialchars($theme['themeDescription']));
                } else {
                    $this->themePath = BASE_PATH.'/templates/default';
                }

            } else {
                $this->themePath = BASE_PATH.'/templates/default';
            }

        } else {
            $this->themePath = BASE_PATH.'/templates/default';
        }

    }

    function parse($file, $vars){

    $this->getTheme();

        if(file_exists($this->themePath.'/'.$file)){
            $file = file_get_contents($this->themePath.'/'.$file);

            foreach($vars as $key => $val){
                $file = str_replace('{'.$key.'}', $val, $file);
            }
            echo $file;
        } else {
            die('Template parser error: the file \''.$this->themePath.'/'.$file.'\' does not exist!');
        }
    }

    function display($file){

        if(file_exists($this->themePath.'/'.$file)){
            $file = file_get_contents($this->themePath.'/'.$file);
            echo $file;
        } else {
            die('Template parser error: the file \''.$this->themePath.'/'.$file.'\' does not exist!');
        }

    }
}

更新

对不起,我忘了包括那个

<?php

class Controller {

    function Controller(){

        $this->initialize();

    }

    function initialize(){

        $classes = array(
                        'load' => 'Load',
                        'uri' => 'URI',
                        'config' => 'Config',
                        'template' => 'Template'
                        );

        foreach($classes as $var => $class){

            if(file_exists($this->app_path.'/classes/'.$class.'.php')){
                require_once(BASE_PATH.'/classes/'.$class.'.php');
                $this->$var =& new $class;
            } else {
                return FALSE;
            }

        }

    }

}

?>

最佳答案

您的 Home 实例上的成员变量 $template 没有被初始化。某处需要调用 $this->template = new Template(); 或类似的东西。

这可能应该在 Home __construct 或父 Controller 类中。

根据您的 Controller 初始化函数,我假设给定类之一的文件不存在,因此它会通过 return false;

提前退出该函数

回显正在加载的类,如果它到达数组末尾我会感到惊讶。

关于php - 调用非对象的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4966138/

相关文章:

php - 来自 MySQL 的随机文本,只需单击按钮,无需使用 PHP 刷新

php - CakePhp,MySQL "Like"如何作为不区分大小写的搜索工作

php - Symfony 2.0 中独立的安全组件

Javascript - 静态方法和实例方法的名称相同不好的做法?

Python修改不在函数内部的变量

C++接受成员和外部函数指针

javascript - 使用 wp.media 访问图像标题的 Wordpress 媒体库

c# - 为什么不直接使用类字段呢?

python - sessionmaker 错误

c - 了解在另一个 C 中调用一个函数