がるの健忘録

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

シングルトンの書き方

なんか、奇妙な「シングルトンもどき」を見かけたので、ちょっと怖くなって念のため。
えと。それは、こんな風にかかれていました。

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