小枝をサポートする新しいスリムなプロジェクトを開始します。データベースレイヤーとしてPDOを使用したいのですが、統合する方法は何ですか?または単にGLOBAL$dbを使用しますか?
ありがとう。
私は可変グローバルに反対しています。接続を返す単純なファクトリ メソッドを使用できます。
function db() {
static $db = null;
if (null === $db)
$db = new PDO(...);
return $db;
}
このような問題をさらに処理しようとしている場合は、レジストリを検討してください (これを参照してください)。
可変グローバルについて:
私はそのようなものに反対しています。なぜなら、それらは変異しやすいからです。
プログラムの流れの中で、状況が予期せず変化した場合はどうなりますか?
物事が壊れます。
あなたがプロジェクトに取り組んでいる唯一の人なら、グローバルは問題ないかもしれません。
しかし、私の経験から言えば、このシナリオでも、グローバル変数を追跡するのは面倒であり、コードの論理的な構成を損ないます。
そのようなグローバルを上書きする他の人とコードを共有するところまで来たらどうしますか?
また、グローバルは、懸念の分離のコンテキストでのデータのカプセル化の方法論と矛盾します。
これらすべてが、ソフトウェア アーキテクチャの大きくて幅広い科学に影響を与えます。
さらに、この特定のケースでファクトリを使用すると、データベースへの接続への参照を 1 つだけ保持することが保証されます。
このプロジェクトを見てください: Slim-PDO (github)
ドキュメントはこちら
composer 経由でインストールします。
$ composer require slim/pdo
簡単な使い方:
$app->container->singleton('database', function () use ($app) {
return new \Slim\PDO\Database($app->config('db.dsn'), $app->config('db.usr'), $app->config('db.pwd'));
});
// SELECT * FROM users WHERE id = ?
$selectStatement = $app->database->select()
->from('users')
->where('id', '=', 1234);
$stmt = $selectStatement->execute();
$data = $stmt->fetch();
// INSERT INTO users ( id , usr , pwd ) VALUES ( ? , ? , ? )
$insertStatement = $app->database->insert(array('id', 'usr', 'pwd'))
->into('users')
->values(array(1234, 'your_username', 'your_password'));
$insertId = $insertStatement->execute(false);