我为标题不清楚道歉,我想不出更好的标题。我收到了这个错误:
致命错误:在非对象上调用成员函数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
?
感谢。
答案 0 :(得分:4)
在构建和分配$sp
之前,它没有值。事实上,构造函数尝试创建SPConfig
,它试图访问仍为空的$sp
。
为了使其工作,构造函数需要将$this
或$this->db
传递给SPConfig构造函数。
答案 1 :(得分:3)
你有鸡蛋问题。在分配全局$sp
时,您会设置SPClasses
对象,该对象会SPCOnfig
访问尚未分配的$sp
。
将SPClasses
对象作为参数传递给SPConfig
类,你没事。