用于PDO连接的PHP单例类

时间:2012-04-27 12:12:17

标签: php pdo

我设计了以下课程

<?php 

    class DB { 

        private static $objInstance; 

        /* 
         * Class Constructor - Create a new database connection if one doesn't exist 
         * Set to private so no-one can create a new instance via ' = new DB();' 
         */ 
        private function __construct() {} 

        /* 
         * Like the constructor, we make __clone private so nobody can clone the instance 
         */ 
        private function __clone() {} 

        /* 
         * Returns DB instance or create initial connection 
         * @param 
         * @return $objInstance; 
         */ 
        public static function getInstance(  ) { 

            if(!self::$objInstance){ 

                $ini_array = parse_ini_file("db.ini");

                $dbInfo['server'] = $ini_array['server'];
                $dbInfo['database'] = $ini_array['database'];
                $dbInfo['username'] = $ini_array['username'];
                $dbInfo['password'] = $ini_array['password'];

                $dsn = 'mysql:host='.$dbInfo['server'].';dbname='.$dbInfo['database'].'';

                self::$objInstance = new PDO(DB_DSN, $dbInfo['username'], $dbInfo['password']); 
                self::$objInstance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
            } 

            return self::$objInstance; 

        } # end method 

        /* 
         * Passes on any static calls to this class onto the singleton PDO instance 
         * @param $chrMethod, $arrArguments 
         * @return $mix 
         */ 
        final public static function __callStatic( $chrMethod, $arrArguments ) { 

            $objInstance = self::getInstance(); 

            return call_user_func_array(array($objInstance, $chrMethod), $arrArguments); 

        } # end method 

    }
?>

我的问题是当我想执行查询时出现以下错误:

  

致命错误:调用未定义的方法DB :: query()

foreach(DB::query("SELECT * FROM content_type_video") as $row){ 
    print_r($row); 
}

任何想法为什么以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

$db = DB::getInstance();

foreach($db->query("SELECT * FROM content_type_video") as $row){ 
    print_r($row); 
}

答案 1 :(得分:1)

您希望使用的功能在您的PHP版本中不可用 - 您需要至少升级到PHP __callStatic

但是我建议你不要再停止使用单例,并在代码中的任何地方停止使用静态函数调用。

相关问题