Singletonのデザインパターン

<singletonとは>

アプリケーションの処理を通じて、あるクラスのインスタンスは絶対に1つしかないことを保証する仕組みだにょん

<目的>

なぜ1つと制限するにょ??

A 1. newをしてインスタンスを生成することは、コストがかかるから使い回した方が効率が良いことがるので。
2. 「システム全体で読み込んだデータをキャッシュしておくクラス」等、インスタンスを1回しか作りたくない場合があるので。

そもそも、アプリケーションで統一した方法が良い仕組みってあるよにょネ☆\(^o^)/

<実装コード>

class Singleton {
    /** @type  Singleton */
    private static $uniqueInstance;
 
    // コンストラクタを`private`にすることで、他のクラスが勝手にインスタンスを作ることを不可能にする。
    private function __construct() {
        echo '初回のインスタンス化<br>';
    }
 
    // クラスメソッドでインスタンス化して、オブジェクトを返す
    public static function getInstance() {
        if ( ! isset( static::$uniqueInstance ) ) {
            static::$uniqueInstance = new Singleton();
        }
 
        return static::$uniqueInstance;
    }
 
    public function describe() {
        echo 'object_id: ' . spl_object_hash( $this ) . '<br>';
    }
}
 
$obj1 = Singleton::getInstance(); 
$obj2 = Singleton::getInstance();
$obj3 = Singleton::getInstance();
 
$obj1->describe(); // object_id: 0000000027a6907d000000012e0071f9
$obj2->describe(); // object_id: 0000000027a6907d000000012e0071f9
$obj3->describe(); // object_id: 0000000027a6907d000000012e0071f9

同一オブジェクトが毎回返されてる━━━(゚∀゚).━━━!!!

<参考>

liginc.co.jp d.hatena.ne.jp