-1

いくつかのグローバル変数を含むconfig.phpファイルがあります。基本的に、それらのほとんどはDBへの接続に関連しています。

例:

$WEBDBHOST = 'localhost';
$WEBDBPORT = '3306';
$WEBDBNAME = 'db';
$WEBDBUSERNAME = 'root';
$WEBDBPASSWORD = '' ;

そして、ほとんどの場合、次のように使用されます。

$dbw = new PDO("mysql:host=$WEBDBHOST;port=$WEBDBPORT;dbname=$WEBDBNAME", $WEBDBUSERNAME, $WEBDBPASSWORD);

これは私にはまったく効率的ではありません。コードを改善するにはどうすればよいですか? グローバル変数を含むある種のデータベース層を作成し、新しい pdo オブジェクトを返すある種の getWEBDB() を作成しますか?

または、これに対処するためのより良い方法はありますか?私は複数のDBを持っていることに注意してください。そのため、getWebDB()、getGameDB()などについて考えていました.

4

1 に答える 1

0

はい、db レイヤーを作成する必要があります。誰もがすべき。

いいえ、「構成ファイルに大量のグローバル変数」があるためではありません。実際のところ、グローバル変数は1 つだけである必要があります。

$cfg['db']['game']['host']    = 'localhost';
$cfg['db']['game']['port']    = '3306';
$cfg['db']['game']['base']    = 'db';
$cfg['db']['game']['user']    = 'root';
$cfg['db']['game']['pass']    = '';
$cfg['db']['game']['charset'] = 'utf8';

これで、このようなクラスに目的の構成オプションを渡すことができます

$gamedb = new DBLayer($cfg['game']);

そして、このようなコンストラクタを持っています

function __construct($db)
{
    $dsn  = "mysql:";
    $dsn .= "host=".   $db['host'].";";
    $dsn .= "dbname=". $db['name'].";";
    $dsn .= "port=".   $db['port'].";";
    $dsn .= "charset=".$db['charset'];

    $opt = array(
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    );
    return new PDO($dsn,$db['user'],$db['pass'], $opt);
}
于 2013-06-27T05:42:20.887 に答える