5

小枝をサポートする新しいスリムなプロジェクトを開始します。データベースレイヤーとしてPDOを使用したいのですが、統合する方法は何ですか?または単にGLOBAL$dbを使用しますか?

ありがとう。

4

2 に答える 2

6

私は可変グローバルに反対しています。接続を返す単純なファクトリ メソッドを使用できます。

function db() {
  static $db = null;
  if (null === $db)
    $db = new PDO(...);
  return $db;
}

このような問題をさらに処理しようとしている場合は、レジストリを検討してください (これを参照してください)。

可変グローバルについて:

私はそのようなものに反対しています。なぜなら、それらは変異しやすいからです。
プログラムの流れの中で、状況が予期せず変化した場合はどうなりますか?
物事が壊れます。

あなたがプロジェクトに取り組んでいる唯一の人なら、グローバルは問題ないかもしれません。
しかし、私の経験から言えば、このシナリオでも、グローバル変数を追跡するのは面倒であり、コードの論理的な構成を損ないます。
そのようなグローバルを上書きする他の人とコードを共有するところまで来たらどうしますか?

また、グローバルは、懸念の分離のコンテキストでのデータのカプセル化の方法論と矛盾します。

これらすべてが、ソフトウェア アーキテクチャの大きくて幅広い科学に影響を与えます。

さらに、この特定のケースでファクトリを使用すると、データベースへの接続への参照を 1 つだけ保持することが保証されます。

于 2012-11-07T03:44:59.597 に答える
4

このプロジェクトを見てください: 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);
于 2016-05-29T17:16:52.147 に答える