0
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() ''

我究竟做错了什么?

4

3 回答 3

0

您应该了解可见性和简单模式单例。代替

private static function getInstance()

public static function getInstance()

还。你认为在哪里为 PDO 取参数?

于 2014-09-08T01:42:29.597 回答
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()

如果我错了对不起!

于 2014-09-08T01:49:52.263 回答
0

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

if(!isset(self::$_instance))
{
    try{
        self::$_instance = new PDO($dsn, $user, $password);
    } catch(PDOException $e){
        die($e->getMessage()); 
    }
}
于 2014-09-08T01:51:15.893 回答