2

私は次のクラスを設計しました

<?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); 
}

これを修正する理由と方法はありますか?

4

2 に答える 2

1

利用したい機能は、お使いの PHP バージョンでは利用できません__callStatic。.

ただし、とにかくシングルトンの使用をやめ、コード内のあらゆる場所で静的関数呼び出しを使用するのをやめることをお勧めします。

于 2012-04-27T12:54:47.413 に答える
1
$db = DB::getInstance();

foreach($db->query("SELECT * FROM content_type_video") as $row){ 
    print_r($row); 
}
于 2012-04-27T12:15:27.270 に答える