数据库连接类错误

时间:2014-09-08 01:39:26

标签: php class dbconnection

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 个答案:

答案 0 :(得分:0)

您应该了解visibility和简单模式singleton。 替换

private static function getInstance()

使用

public static function getInstance()

另外。您认为在哪里为PDO采用参数?

答案 1 :(得分:0)

您使用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()

如果我错了抱歉!

答案 2 :(得分:0)

除了@sectus指出的内容之外,构造函数永远不会返回任何内容 self::$_instance = new DB();实际上没有意义,考虑将该逻辑移到函数本身:

if(!isset(self::$_instance))
{
    try{
        self::$_instance = new PDO($dsn, $user, $password);
    } catch(PDOException $e){
        die($e->getMessage()); 
    }
}
相关问题