PHP类在构造函数中不存在

时间:2010-07-20 12:10:27

标签: php

我为标题不清楚道歉,我想不出更好的标题。我收到了这个错误:

  

致命错误:在非对象上调用成员函数query()

这是由类SPConfig中的构造函数引起的,可以与类SPClasses一起查看,如下所示:

$sp = new SPClasses();

class SPClasses
{
    public $db, $config, $page, $users;

    function __construct()
    {       
        // The SPDatabase class [...]
        $this->db = new SPDatabase();

        // The SPConfig class [...]
        $this->config = new SPConfig();

        // [...]

        // The SPTemplate class [...]
        $this->page = new SPTemplate();

        // The SPUsers class [...]
        $this->users = new SPUsers();
    }
}

class SPConfig
{
    function __construct()
    {
        global $sp;
        $configquery = $sp->db->query("SELECT * FROM config", 'Retrieving the configuration');
        while($row = mysql_fetch_array($configquery))
        {
            try
            {
                $this->{$row['name']} = $row['value'];
            }
            catch (Exception $e)
            {
                $debug_log[] = array(
                    'type' => 'error',
                    'success' => false,
                    'text' => 'The config setting <i>' . $row['config_value'] . '</i> has an invalid name.'
                );
            }
        }
    }


    public function update()
    {
        $this->__construct();
    }
}

有谁知道为什么我无法访问$sp->db构造函数中的SPClasses

感谢。

2 个答案:

答案 0 :(得分:4)

在构建和分配$sp之前,它没有值。事实上,构造函数尝试创建SPConfig,它试图访问仍为空的$sp

为了使其工作,构造函数需要将$this$this->db传递给SPConfig构造函数。

答案 1 :(得分:3)

你有鸡蛋问题。在分配全局$sp时,您会设置SPClasses对象,该对象会SPCOnfig访问尚未分配的$sp

SPClasses对象作为参数传递给SPConfig类,你没事。