PHP デザインパターン シングルトンを実装



デザインパターンにシングルトンパターンというものがあります。

シングルトンパターンのは、そのクラスのインスタンスが1つしか生成されないことを保証することができるデザインパターンです。
なのでどこで呼び出しても同じインスタンスが返ってくるという利点があります。
うまく活用すれば新たなインスタンスが生成されないのでリソースの消費が抑えられたり、値のやり取りが簡単になります。

サンプルコード
<?php
class Singleton{
	/** 自己クラスのインスタンスを保持 */
	private static $instance = null;

	/** **/
	private $msg = "default";

	/**
	 * privateにして他クラスからのインスタンスの生成を出来ないようにする。
	 */
	private function __construct() {
	}

	/**
	 * このクラスのインスタンスを生成し返す。
	 *
	 * @return Singleton
	 */
	public static function get()
	{
		if (is_null(self::$instance)) {
			self::$instance = new self;
		}

		return self::$instance;
	}

	/**
	 * 文言を設定して出力。
	 * 設定されなかった場合は以前のを使用。
	 * @param string $msg
	 */
	public function message($msg = null) {
		if(!is_null($msg)){
			$this->msg = $msg;
		}
		echo $this->msg.PHP_EOL;
	}
}

$one = Singleton::get();	// クラスを取得
$one->message();			// メッセージを出力
$one->message("ONE");		// メッセージを設定して出力

$two = Singleton::get();	// クラスを取得
$two->message();			// メッセージを出力

下記は実行結果
default
ONE
ONE
47行目で出力実行を行うと「ONE」と表示される、これはシングルトン機能によって43行目で設定された値を引き継いでいるためです。
共通的な値や機能をシングルトンの状態にしておくと使いやすくなります。


コメントを残す