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
同一オブジェクトが毎回返されてる━━━(゚∀゚).━━━!!!