なんか、奇妙な「シングルトンもどき」を見かけたので、ちょっと怖くなって念のため。
えと。それは、こんな風にかかれていました。
function __construct() { self::$_ins = $this; } function getInstance() { return self::$_ins; } function hoge() { // まぁなにがしかの処理を $this に対して } static function foo() { // まぁなにがしかの処理を self::$_ins に対して }
使い方は。普通シングルトンなら
$obj = クラス名::getInstance();
でよかろうもんを、上述は、プログラムの先頭付近で
new クラス名();
というおまじないが不可避。
とりあえず。「使い方が一定でない(インスタンスからcallしたりstaticなメソッドだったり)」ところで限りなく黒に近いグレー。
「使う前にnewが必要」な部分もグレー(っつかおまじないが必要な時点で、基本おいちゃん的には黒)。
「もう一度newされたら違うインスタンスになっちゃう == 元のインスタンスが壊れる」ところは完全に黒。
総じて「なんでこういう書式になったのか不明」です*1。
そもシングルトン自体、限りなく「global変数に近しい」ので、好まないのですが。
もし使うのなら、せめて「ちゃんとシングルトン(単体のオブジェクトが保証される)」にしましょう。
*1:「知識不足」「勉強不足」の類である事は自明の理ではあるのですが… orz