2016-12-07 5 views
0

現在、データベースのデータを処理して戻すAPIを構築しています。php:データベースインスタンス/接続を1つだけ使用する方法

私のデータベースクラスがここで見つけることができます:http://pastebin.com/PdDUeS3x

今私が読み取ってデータベースからデータを書き込みUserクラスを持っています。

現在、私はすべての機能に次のように使用します。私は私のユーザークラスにこれらdoSomething()の機能の多くを持っているので

public function doSomething() { 
    $DB = Database:i(); 
    // Do something with $DB 
} 

は私が$DB = Database:i()を使用頻繁に使用します。

たとえば、このコードを実行すると、データベースに対して3つの接続を作成しますか?

$User = new User(); 
$User->doSomething(); 
$User->doSomething(); 
$User->doSomething(); 

もしそうなら、私の代わりにこの変数にアクセス私のユーザークラス$_DB = Database:i()に、私の関数でクラス変数を追加する必要がありますか?

+3

を使用するように接続します。実際に一度だけ、それをインスタンス化し、コンストラクタの引数としてすべてのクラス/オブジェクトに渡します。 →**依存性注入を参照してください。** – deceze

+1

[Staticsを使用してテスト容易性を破壊しない方法](http://kunststube.net/static/) – deceze

+0

これは私にとってあまり優雅ではないようです。そして、もっと大きなPHPプロジェクトをチェックしたところ、私は誰もそのように扱うことができなかった。しかし、私は彼らがそれをどうやって行うのか理解できませんでした。 – Panni

答えて

0

データベースクラスのインスタンスを1つだけ使用し、MySQLへの接続を管理する2つの異なる問題があります。だからここ

が短いバージョンです:コードの場合

  • 自体が、あなたは外のインスタンスを作成し、引数としてデータベースオブジェクトを渡し、または、より少ない理想的な、のシングルトン
  • を使用できますデータベース接続は、あなたのPDOを設定したいかもしれません::持続的接続(​​例#4持続的接続)
  • シンプル
+0

固定接続を使用していただきありがとうございます。それは私のアプリケーションを多くスピードアップするはずです。 – Panni

+0

だから、私のapiが呼び出された場所のルートにデータベースインスタンスを作成し、それをデータベース接続が必要なすべてのオブジェクトに渡す必要があります。 私の目にはあまりよくないようですね。 '$ User = new User($ userID、$ DB)' – Panni

+0

これを達成する方法はたくさんありますが、今日では主に依存性注入によってそのようなケースを扱うようになっています。あなたがテストとして非常に迅速かつ汚いことをしたいのであれば、dbオブジェクトをUserクラスに渡すことができます。しかし、これは将来、複数の "モデル"ソートを持つことになるでしょう。 – Stelian

関連する問題