Singletonパターンについて書いてみます。
Singletonパターンはインスタンスが1つしか存在しない唯一のオブジェクトを生成するために使います。
オブジェクトが1つしか必要ないというケースとは ・スレッドプール ・キャッシュ ・ダイアログボックス ・プリファレンス ・レジストリの設定を処理するオブジェクト ・ロギング用のオブジェクト など。 これらのオブジェクトを二つ以上インスタンス化してしまうとプログラムの誤操作、リソースの使いすぎ、つじつまの合わない結果などの問題が出てきます。
特徴としてクラス外部からインスタンスを作成できないようにするためにコンストラクタをprivateにします。
・Singleton.php
<?php
class Singleton
{
private static Singleton $singleton;
private function __construct()
{
echo "create singleton";
}
public static function getInstance(): \\Singleton
{
if (!isset(self::$singleton)) {
self::$singleton = new Singleton();
}
return self::$singleton;
}
}
・index.php
<?php
require_once 'Singleton.php';
$singleton1 = Singleton::getInstance();
$singleton2 = Singleton::getInstance();
if ($singleton1 === $singleton2) {
echo "同じインスタンス";
}
// new Singleton();
// Fatal error: Uncaught Error: Call to private
インスタンスをnewしようとするとコンストラクタがプライベートなのでFatal errorとなります。 インスタンスが一つしか存在しないことを保証できます
(参考)
Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本
2005/12/2
Eric Freeman (著), Elisabeth Freeman (著), Kathy Sierra (著), Bert Bates (著), 佐藤 直生 (監訳), 木下 哲也 (翻訳), 有限会社 福龍興業 (翻訳)
5章 Singletonパターン:唯一のオブジェクト