-1

すべてのモデルを拡張するデータベース接続クラスを作成しようとしています。

問題は、PDO接続オブジェクトを返すように指示しているのにデータベースオブジェクトを返さないことです。

class Database {

protected $conn ;
public $user ;
public $pass ;
public $database ;
public $encoding ;

function __construct($user = 'user', $pass = 'pass', $database = 'view4', $host = 'localhost', $encoding = 'UTF8')
{
    try {
        $this->user = $user ;
        $this->pass = $pass ;
        $this->database = $database ;
        $this->encoding = $encoding ;

        $options = array(
                   'PDO::ATTR_ERRMODE' => 'PDO::ERRMODE_WARNING',
                   'PDO::ATTR_PERSISTENT' => TRUE,
                   'PDO::ATTR_DEFAULT_FETCH_MODE' => 'PDO::FETCH_ASSOC',
                   'PDO::ATTR_EMULATE_PREPARES' => FALSE,
                    ) ;

        $this->conn = new PDO('mysql:host='.$host.';dbname='.$this->database,
                              $this->user,
                              $this->pass,
                              $options
                             ) ;
        $this->conn->exec('SET NAMES '.$this->encoding) ;
        return $this->conn ;
    } catch(PDOException $e) {
        $this->handleError($e) ;
    }
}

protected function handleError($e)
{
    if(strstr($e->getMessage(), 'SQLSTATE[')) { 
        preg_match('/SQLSTATE\[(\w+)\] \[(\w+)\] (.*)/', $e->getMessage(), $matches); 
        $code = ($matches[1] == 'HT000' ? $matches[2] : $matches[1]).': ';
        echo $message = $code.$matches[3] ;
        return false ;
    } 
}

}

それは私にエラーを与えます:

Fatal error: Call to undefined method Database::query() in C:\xampp\htdocs\IMS4\libs\Database.php on line 52

私は何が間違っているのですか?

4

1 に答える 1

2

returnコンストラクターからは何もできません。を書くとき、コンストラクターから何を返すかに関係なくnew Database、オブジェクトを取得します。Database

于 2012-12-03T11:38:28.780 に答える