PHP7未満ではシングルトンの生成メソッドはこんな感じだったと思います。static
で静的変数を定義し、それがNULLかどうかのif節を書きといった具合に。
<?php
function getInstanceOldStyle()
{
static $instance;
if ($instance === null) {
$instance = new stdClass();
}
return $instance;
}
assert(getInstanceOldStyle() === getInstanceOldStyle());
PHP7からはnull 合体演算子 (??) が追加されたので、もっとシンプルに書くことができそうです。
function getInstance()
{
static $instance;
return $instance ?? $instance = new stdClass();
}
assert(getInstance() === getInstance());
なおクラスのstatic
キーワードを使うならこんな感じでしょうか。
class Singleton
{
private static $instance;
public static function getInstance()
{
return self::$instance ?? self::$instance = new self();
}
}
assert(Singleton::getInstance() === Singleton::getInstance());