PHPでWebアプリケーションを開発しています。データベース接続を使用する多くのクラスがあります。
これは私が一般的に使用する構造です。
class SomeClass {
private $db;
function __construct(mysqli $db) {
$this->db = $db;
}
function SomeFunction() {
$this->db->query(...);
}
}
そして、これが私が使用すると思ったものです。
class Common {
public static DB = new mysqli(...);
}
class SomeClass {
function SomeFunction() {
Common::DB->query(...);
}
}
私の質問には 2 つの部分があります。
どちらがより良い練習ですか?最初のものを使用する場合、db を使用するすべてのクラスにデータベース オブジェクトを渡す必要があります。2番目のものを使用すると、すべてのクラスがdbを使用し、Commonクラスに依存します。
例をより簡単にしました。実際には、データベースクラスがmysqliを拡張し、データベースクラスを使用してデータベーステーブルマネージャークラスがあります。Database クラスに GetTable() 関数を追加します。この関数 (
return new DatabaseTableManager($this, $tableNameFromArgument)
) で DatabaseTableManager オブジェクトを作成するので、毎回 db オブジェクトを渡す必要はありません。DatabaseTableManager クラスでは、仕事を簡単にするためにいくつかのクエリを作成しました。
たとえば、レコードをテーブルに挿入します。
$DB = new Database(...);
$myTable = $DB->GetTable('myActualTableNameInDatabase');
$myTable->Insert( array('col1' => 'val1', 'col2' => 'val2') );
だから私はこのクラスを他のクラスでよく使っています。当然、これらのクラスはすべて DatabaseTableManager クラスに依存します。より良い解決策は何ですか?