Singleton は、 生成に関するデザインパターンの一つで、 この種類のオブジェクトがただ一つだけ存在することを保証し、 他のコードに対して唯一のアクセス・ポイントを提供します。
Singleton には、 大域変数とほぼ同じ長所と短所があります。 両方とも随分と便利ですが、 コードのモジュール性を犠牲にしています。
シングルトンのクラスに依存しているあるクラスを使う場合、 シングルトンのクラスも一緒に使う必要があります。 ほとんどの場合、 この制限は、 ユニット・テストの作成で問題となります。
概念的な例
この例は、 Singleton デザインパターンの構造を説明するためのものです。 以下の質問に答えることを目的としています:
- どういうクラスからできているか?
- それぞれのクラスの役割は?
- パターンの要素同士はどう関係しているのか?
ここでパターンの構造を学んだ後だと、 これに続く、 現実世界の PHP でのユースケースが理解しやすくなります。
index.php: 概念的な例
Output.txt: 実行結果
現実的な例
Singleton パターンは、 コードの再利用を妨げ、 ユニット・テストを複雑にすることで悪い評判があります。 しかし、 場合によっては大変役に立ちます。 特にある種の共用資源を管理する必要がある場合、 便利です。 たとえば、 ログ・ファイルへのアクセス制御を行う大域ロギング・オブジェクトが挙げられます。 もう一つの例としては、 実行時構成の共用記憶が挙げられます。
index.php: 現実的な例
Output.txt: 実行結果