LoginSignup
0
0

More than 3 years have passed since last update.

※学習用メモ デザインパターン:Singleton編[PHP]

Posted at

Singletonパターンとはどういうものか

Singletonとは一つのものという意味です。

Singleton パターンとは、そのクラスのインスタンスが1つしか生成されないことを保証するデザインパターンのことである。(wikipediaより)

ポイントとしては、指定したクラスのインスタンスが1つしか存在しないことを保証するということです。

インスタンスの状態を保持したかったり、クラス間で共通のメソッド・プロパティにアクセスしたい場合に使用されることが多いです。

Singletonパターンを用いるメリット

・同一インスタンスを使いまわすので、インスタンスの状態を保持したまま他の箇所で使用できる

[参考]
https://ja.wikipedia.org/wiki/Singleton_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
https://qiita.com/shoheiyokoyama/items/c16fd547a77773c0ccc1
https://www.techscore.com/tech/DesignPattern/Singleton.html/
https://qiita.com/buntafujikawa/items/2e8e8f13b6eb2f2f9e64

サンプルコード

仕様

・数字のカウントを行います。

countData.class.php
class countData
{
    private static $_INSTANCE = NULL;
    private $countNum = 0;

    private function __construct(){}

    public static function getInstance()
    {
        if (!self::$_INSTANCE) {
            self::$_INSTANCE = new self();
        }

        return self::$_INSTANCE;
    }

    public function getCount()
    {
        return $this->countNum;
    }

    public function countUp()
    {
        $this->countNum++;
    }
}

使ってみる

$instance = countData::getInstance();
print_r("初期\n");
print_r($instance->getCount() . "\n");

$instance->countUp();
print_r("カウントアップ\n");
print_r($instance->getCount() . "\n");

$sub = countData::getInstance();
print_r("取得しなおし\n");
print_r($instance->getCount() . "\n");

/*結果
初期
0
カウントアップ
1
取得しなおし
1
*/

上記のように、カウントアップされた後に別変数にインスタンスを再取得した場合にも、状態を保持していることが確認できます。

まとめ

・Singletonパターンは、一つのインスタンスしか生成されないことを保証することで1つの処理の中で何回取得されても同じインスタンスを参照しで処理を進められる点が大きなメリットになります。
・例えば複数人でのゲームの場合、共通のデータを参照したい際はこのパターンを使用することで複数人の処理を同一インスタンスに対し行うことができ、何度も生成→保存の流れを繰り返すことなく処理を進めることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0