尝试从另一个类中的Singleton类调用方法时,我收到以下错误消息。
在非对象上调用成员函数query()。
答案 0 :(得分:2)
$db
应该成为$this->db
。
public function __construct() {
$this->db = Database::getInstance('localhost', 'database', 'root', '123456');
}
答案 1 :(得分:0)
只需将构造函数中的$db
更改为$this->db
即可。在PHP中,通过显式引用$this
对象来访问成员属性。
此外,您在Database类中犯了同样的错误。另外,指定方法connect()作为静态没有多大意义。另外,如果你问我,private
限定符比public
更合适。最后,如果您无意在其他地方处理异常,请使用die()
代替echo
。
public function connect($server, $database, $user, $pass) {
try {
$this->pdo = new PDO("mysql:host=$server;dbname=$database", $user, $pass);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Error!";
}
}
方法query()
中也使用$this->pdo
而非$pdo
。
答案 2 :(得分:0)
除了在您的Users构造函数中将$ db分配给$ this-> db之外,您还需要在数据库中分配和引用$ pdo作为$ this-> pdo。