Ошибка класса базы данных
class DB
{
private static $_instance;
private $_pdo,
$_query,
$_error = false,
$_results,
$_count = 0;
private function __construct()
{
try{
$this->_pdo = new PDO($dsn, $user, $password);
} catch(PDOException $e)
{
die($e->getMessage());
}
}
private static function getInstance()
{
if(!isset(self::$_instance))
{
self::$_instance = new DB();
}
return self::$_instance;
}
}
Когда я пытаюсь получить экземпляр, используя $db = DB::getInstance(); Я получаю: Фатальная ошибка: вызов частного метода DB:: getInstance () из контекста ''
Что я делаю неправильно?
3 ответа
Решение
В дополнение к тому, что указал @sectus, конструктор никогда не вернет ничего self::$_instance = new DB();
на самом деле не имеет смысла, рассмотрим перенос этой логики на саму функцию:
if(!isset(self::$_instance))
{
try{
self::$_instance = new PDO($dsn, $user, $password);
} catch(PDOException $e){
die($e->getMessage());
}
}
Вы используете класс DB в качестве абстрактного класса, вы должны создать его объект. и вы также должны передать $dsn, $user, $password.
class DB
{
private static $_instance;
private $_pdo,
$_query,
$_error = false,
$_results,
$_count = 0;
public function __construct($dsn, $user, $password)
{
try{
$this->_pdo = new PDO($dsn, $user, $password);
} catch(PDOException $e)
{
die($e->getMessage());
}
}
public static function getInstance()
{
if(!isset(self::$_instance))
{
self::$_instance = new DB();
}
return self::$_instance;
}
}
использование
$db = DB('dsn','user','password');
$db->getInstance()
Если я ошибаюсь, извините!