singletons
の使用 PHPでは悪い習慣と見なされます。私の経験から、それらに関する最も問題のある問題は単体テストです。シングルトンをテストする場合、2つのテストが独立していることを確認するのは困難です。
「インスタンスは1つだけ存在する必要がある」という制約の責任を、Dbオブジェクトを作成するコードに委任します。
また、私にとっては、他の言語とは対照的に、PHPでシングルトンがどのように機能するかについて誤解があるようです。たとえば、10.000の同時リクエストがある場合、各リクエストは別々のPHPプロセスまたはスレッドで実行されます。つまり、すべて独自のリクエストがあります。 「シングルトン」のインスタンスでは、複数のリクエストに対してこのオブジェクトを共有することはありません(一般的なWebバックエンドシナリオでPHPを実行している場合)
PHPには「接続プール」はありませんが、mysqli
を使用できます。 mysqlの永続的な接続。これは、p:
を渡すことで実現できます。 mysqliを作成するときにホスト名の前に。これはここでは役立つかもしれませんが、注意して処理してください(最初にドキュメントを読むことを意味します )
ただし、理論上、PHPのシングルトンは、誰かがclone
を使用できるという事実を認識している必要があります。 。あなたの場合、それを行うことが可能であることを意味します:
$db = DB::getInstance();
$db2 = clone $db;
これを回避するには、__clone()
を実装できます。 このような方法:
public function __clone() {
throw new Exception("Can't clone a singleton");
}