PHP5 Singleton-Pattern

Singleton Pattern (Entwurfsmuster) am Beispiel einer Protokoll-Klasse



class Singleton
{
	private static $instance = NULL;
	private static $arrProtocol = array();
 
 
	/**
	* private, um Instanziierung zu verhindern
	*/
	private function __construct ( ) { /** do nothing */ }
 
 
	/**
	* private, um das Klonen zu verhindern
	*/
	private function __clone ( ) { /** do nothing */ }
 
 
	/**
	* Ausgabe der statischen Instanz
	*/
	public static function getInstance()
	{
	   if (self::$instance === NULL)
			self::$instance = new self;
 
		return self::$instance;
	}
 
 
	public function addMessage ( $message )
	{
		if( strlen($message) >= 1 )
			self::$arrProtocol[] = $message;
	}
 
 
	public function getMessage ( )
	{
		$result = NULL;
 
		if ( count(self::$arrProtocol) >= 1 )
		{
			while( list(,$message) = each(self::$arrProtocol) )
				$result .= $message.'<br />';
			reset(self::$arrProtocol);
		}
 
		return $result;
	}
 
}
 
// Test
$singleton = Singleton::getInstance();
$singleton->addMessage('Message 1');
$singleton->addMessage('Message 2');
 
$singleton2 = Singleton::getInstance();
$singleton2->addMessage('Message 3');
$singleton2->addMessage('Message 4');
 
Singleton::getInstance()->addMessage('Message 5');
Singleton::getInstance()->addMessage('Message 6');
 
// $singleton3 = new Singleton(); // Fatal error: Call to private Singleton::__construct()
//$singleton3 = clone $singleton; // Fatal error: Call to private Singleton::__clone()
 
echo $singleton->getMessage();
 
/**
Ausgabe
 
Message 1
Message 2
Message 3
Message 4
Message 5
Message 6
*/
Weitere Informationen
http://de.wikipedia.org/wiki/Singleton_%28Entwurfsmuster%29