【发布时间】:2017-05-09 12:48:42
【问题描述】:
尝试在连接类之外运行查询时出现以下错误。
致命错误:在...中调用未定义的方法 Core\Database::query()
我有以下文件。
数据库.php
namespace Core;
use \PDO;
class Database
{
private $pdo;
private static $instance;
private function __construct()
{
try {
$this->pdo = new PDO("mysql:host=localhost;dbname=db;", "root", "pw");
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (\PDOException $e) {
echo $e->getMessage();
}
}
public static function getInstance()
{
if (!isset(self::$instance))
self::$instance = new Database();
return self::$instance;
}
}
Auth.php
namespace Auth;
use Core\Database;
class Auth
{
protected $dbh;
public function __construct()
{
$this->dbh = Database::getInstance();
$query = $this->dbh->query("SELECT * FROM table");
}
}
提前感谢您的帮助。
【问题讨论】:
-
就像错误所说的那样,您的 Database 类中没有查询方法。 getInstance() 返回 Database 类的实例,而不是 PDO。
-
@Devon,好的:我在 Auth.php 中将
$this->dbh->query更改为$this->dbh->pdo->query,但还有其他方法吗?看起来有点乱。 -
另外,使实例变量
$pdopublic,否则你将无法在课堂外访问它,尤其是当你调用->query(...)时来自Auth类。 -
单例数据库对象是一种代码味道。正常构造一个PDO对象,通过Auth对象的构造函数传入。 phptherightway.com/#dependency_injection
-
您是否通过任何给定的答案解决了问题?如果一个有用的赞成票并且如果它解决了,请标记它。
标签: php class pdo namespaces