2009-07-17 11 views
1

私は最初のクエリが実行されたときにデータベースへの接続を開くように構築されたデータベースクラスを持っています。サイトのユーザー、グループなどに使用される他のクラスをそれぞれ1つずつ作成する必要がありますか?これにより、クラスを他の場所に簡単にデプロイすることができます。それらはデータベースクラスにのみ依存します。しかし、これは私が各クラスに資格を入れる必要があります。それほど面倒ではないもう一つのアプローチは、データベースオブジェクトを作成し、それをグローバル変数に保存することです。これにより、アクティブなデータベース接続を同時に減らすことができ、設定が容易になります。資格情報は一度設定する必要があります。各クラスまたはサイト全体のデータベースオブジェクト?

どこかで、グローバル変数を避けるべきだと聞いたことがあります。これに対するベストプラクティスアプローチは何ですか?

+0

もしあなたがいなくなったら梨をチェックしてください。時間を節約できますhttp://pear.php.net/package/DB –

+0

http://stackoverflow.com/questions/1967548/best-way-toこのトピックのより幅広い議論のためには、access-global-objects-like-database-or-log-from-classes-and-scriptsを参照してください。 – philfreo

答えて

1

あなたは自分のコンストラクタでデータベース接続オブジェクトを取るために、あなたの他のクラスを得ることができます。そうすれば、彼らは資格情報を知る必要はありません。

もう1つの一般的な方法は、データベース接続にシングルトンを使用することです。基本的にこれはまだグローバル変数ですが、データベースオブジェクトのインスタンス化を1か所で制御できることを意味します。

0

私は接続管理のものだけを含み、テーブル固有のものは含まない基本クラスを作成します。そこに資格情報を置くことができます。

もう1つの選択肢は、そのような基本クラスで資格情報を格納するための静的変数を使用することです(汚れた関数にハードコードするのではなく)。

のでBaseDBConnection::$usernameBaseDBConnection::$password資格情報が含まれており、あなたの他のDBConnectionクラスがBaseDBConnectionから派生してself::$usernameを参照することになり、など

0

グローバルデータベースオブジェクトを避ける必要があります。データベースは可能な限り遅く開いて、できるだけ早く閉じてください。

クラスごとにデータベースオブジェクトを使用する必要があります。必要な場合は、データベースオブジェクトを開いたり閉じたりする必要があります。

0

私は基本的には資格情報を変数として保存し、それを必要なクラスファイルに含める '構成'ファイルを作成します。

このように、すべての資格情報の変更では、「構成」ファイルの変更のみが必要です。

EDIT:

私は、これは、データベースクラスの新しいインスタンスは、すべてのクラスでインスタンス化されるべきであることを意味することを言及するのを忘れてしまいました。

関連する問題