2

私は OO PHP を試していますが、コードを試すと、dbhost、dbuser、dbpass、および dbname が未定義であるというエラーが表示されます。Netbeans は、初期化されていない可能性があるという警告も表示します。static キーワードを削除すると、「予期しない "$dbhost"」というエラーが表示されます。私が間違っていることを誰かが知っていますか?

<?php
class DatabaseManager {

private static $dbhost = 'localhost';
private static $dbuser = 'root';
private static $dbpass = '';
private static $dbname = 'app_db';

public static function getConnection(){
    $dbconn;
    try {
    $dbconn = new PDO('mysql:host='.$dbhost,'dbname='.$dbname,
    $dbuser, $dbpass);
    } catch (PDOException $e) {
        echo "Could not connect to database";
        echo $e;
        exit;
    }
    return $dbconn;

}

}
?>
4

1 に答える 1

3

変数 static を宣言しました。PHP 5.2 以降では、次のように参照します。

$dbconn = new PDO('mysql:host='.self::$dbhost,'dbname='.self::$dbname,
                   self::$dbuser, self::$dbpass);   

PHP 5.3 以降では、それらを private から protected に設定すると、以下も使用できます。

$dbconn = new PDO('mysql:host='.static::$dbhost,'dbname='.static::$dbname,
                   static::$dbuser, static::$dbpass);   

どちらも同じように動作しますが、クラスを拡張すると、 static キーワードによって遅延静的バインディングが可能になります。

于 2012-08-11T14:07:42.003 に答える