PHP7からはシングルトンの生成メソッドを2行で書ける

  • 18
    いいね
  • 1
    コメント

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());