Ошибка класса базы данных

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 ответа

Решение

Вы должны знать о видимости и простой схеме синглтона. замещать

private static function getInstance()

С

public static function getInstance()

Также. Где вы думаете взять параметры для PDO?

В дополнение к тому, что указал @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()

Если я ошибаюсь, извините!

Другие вопросы по тегам