『Java言語で学ぶデザインパターン入門』をPHPで実習する 第5章Singleton

増補改訂版Java言語で学ぶデザインパターン入門

本記事に掲載したサンプルコードは、https://github.com/ryo-utsunomiya/design_patternでも公開中です。

Singletonとは

Singletonは、インスタンスが1個しか存在しないことを保証するパターンです。

Singletonでは、newによるインスタンスの生成を禁止するため、コンストラクタをprivateにするのが一般的です。その代わり、インスタンスの生成・取得を担うメソッドを用意します。

上記サンプルコードのSingletonクラスでは、getInstanceメソッドがインスタンスの生成・取得を担っています。Singletonクラスのインスタンスがself::$singletonにセットされていればそれを返し、セットされていない場合はインスタンスを生成して返します。

このクラスを利用したコードは以下のようになります。

$obj1と$obj2は別の変数ですが、全く同一のインスタンスを参照しています。

なお、PHPではオブジェクトの比較には注意が必要です。

比較演算子(==)を使用する際、 オブジェクト変数は、単純に比較されます。つまり、 二つのオブジェクトのインスタンスは、 同じ属性と値を有し、同じクラスのインスタンスである場合に、 等しいとされます。

一致演算子(===)を使用する場合、 オブジェクト変数は、同じクラスの同じインスタンスを参照する場合のみ、 等しいとされます。

http://php.net/manual/ja/language.oop5.object-comparison.php

ここでは、同じインスタンスであることを確認するため「===」を使用しています。

コメントを残す