シングルトン: PHP データベース アクセスにおける神話
次の簡略化されたシングルトンを考慮すると、PHP データベース アクセスにシングルトンが必要であることに疑問を抱いています。 class:
class Database {
private static $db;
private function __construct(){}
static function get() {
if(!isset(self::$db))
self::$db = new PDO(...);
return self::$db;
}
}
なぜこれができないのか疑問に思うでしょうより複雑なシングルトン クラスの代わりに、singleton() メソッドを使用するだけで十分です。
PHP におけるシングルトンの有用性を暴く
PHP では、シングルトンには最小限の利点があり、あるいはまったく利点がありません。
-
メモリ保全: シングルトンは、共有メモリ内のインスタンスを共有することでメモリ使用量を削減することを目的としています。ただし、PHP では、オブジェクトはプライベート リクエスト メモリに存在するため、この目的は無関係になります。
-
シングルトンの強制: 概念的なシングルトンは、強制のための言語メカニズムを必要としない場合があります。 2 番目のインスタンスを作成すると、悪影響が生じる場合にのみシングルトンを考慮してください。
シングルトンの欠点
-
グローバル カップリング: シングルトングローバル スコープの依存関係が導入され、テストが複雑になり、保守性。
-
依存関係注入の代替手段: 複数のクラスにわたって単一のインスタンスが必要な場合、依存関係注入はよりクリーンでテストしやすいソリューションを提供します。
エーリッヒ・ガンマの懐疑論
シングルトン パターンの作成者である Erich Gamma は現在、その有用性に疑問を抱いています:
- 「私はシングルトンを廃止することに賛成です。その使用はほとんどの場合、デザインの匂いです。」
シングルトンが発生する可能性がある場合適用可能
PHP のシングルトンに対する一般的な懐疑にもかかわらず、次のシナリオを検討してください:
-
グローバル アクセス ポイント: インスタンスのグローバル アクセス ポイントの作成同じリクエスト内での使用は正当化される可能性がありますが、結合とメンテナンスが発生する可能性があります
-
2 番目のインスタンスの削除: 追加のインスタンスが作成されないようにする緊急の必要がある場合にのみ、シングルトンを実装します。
追加リソース
- [シングルトンをテストしていますPHP: なぜトリッキーなのか](link_to_How_is_testing_the_registry_pattern_or_singleton_hard_in_PHP)
- [シングルトン データベースの欠点クラス](link_to_What_are_the_disadvantages_of_using_a_PHP_database_class_as_a_singleton)
- [シングルトンの意思決定図](link_to_Singleton_Decision_Diagram)
以上がPHP データベース アクセスにシングルトンは本当に必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。