インスタンス生成のコストを制御するために、インスタンスが1つしかないことを保証するパターンです。
priavateのコンストラクタとインスタンスを1つだけ返すstaticメソッドと自分自身のインスタンスを保持するためのstatic変数を用意するだけです。
Singletonパターンが保持する自分自身へのアクセスをprivateに制限しているためクライアント側のコードからのアクセスを制御することができます。
生成されるインスタンスの数を2つ以上に変更することも可能です。
<?php
class SingletonConfig {
private $config;
/**
* a single variable
*/
private static $instance;
private function __construct()
{
$this->config = 'AUTO';
}
/**
* Create a only instance
*/
public static function getInstance()
{
if (!isset(self::$instance)) {
self::$instance = new SingletonConfig();
}
return self::$instance;
}
public function getConfig()
{
return $this->config;
}
public final function __clone()
{
throw new RuntimeException('Clone is not allowed against' . get_class($this));
}
}
<?php
require_once 'SingletonConfig.php';
$instanceA = SingletonConfig::getInstance();
$instanceB = SingletonConfig::getInstance();
if ($instanceA->getConfig() === $instanceB->getConfig()) {
echo 'True';
} // true
関連書籍