我一直在玩一些只是试着学习的PHP课程,但是这个让我摸不着头脑,经过大量的SO搜索和google之后我似乎无法找到任何可以解决这个问题的东西(也许我没有正确地搜索搜索)。配置类之前使用了自己的pdo连接,所以我希望确保它不会每次都打开一个新的连接,还有另一个类没有在这里显示,但以同样的方式完成,这似乎工作。这是错误:
在第15行的config.class.php中调用非对象的成员函数query()
我可以看到的唯一区别可能是导致这种情况是配置类在构造中运行查询,而我的其他类没有,这是一个问题,如果是这样,为什么?
尝试了一些不同的东西,但说实话,我只是不明白..只是从在线资源学习PHP。关于此的任何阅读材料也将受到赞赏。
一直在使用这个db类: https://github.com/indieteq/PHP-MySQL-PDO-Database-Class
class Config
{
public $db;
private $config;
public function __construct()
{
global $db;
$this->db = $db;
$this->config = array();
$rows = $this->db->query("SELECT * FROM config");
foreach($rows as $row) {
$this->config[$row['setting']] = $row['value'];
}
}
public function __get($setting)
{
return $this->config[$setting];
}
public function __set($setting, $value)
{
$update = $this->db->query("UPDATE config SET value = :value WHERE setting = :setting", array("value"=>$value,"setting"=>$setting));
if($update > 0) {
$this->config[$setting] = $value;
return true;
} else {
return false;
}
}
}
这些类都在一个文件上调用:
require(INCLUDE_PATH . "Db.class.php");
include(INCLUDE_PATH . "languages\\en.php");
include(INCLUDE_PATH . "config.class.php");
$db = new Db();
$config = new Config();
答案 0 :(得分:2)
试试这个:
$this->db = new Db();
或者在参数中给出数据
public function __construct($db) ...
然后:
$config = new Config($db);