Das Singleton Pattern

Da ich mich seit Langem mit Entwurfsmustern (Design-Patterns) beschäftige, habe ich mich entschlossen Codebeispiele hier zu veröffentlichen und diese zum besseren Verständnis zu beschreiben.

Hier die Implementierung des Singleton Patterns in PHP.

[php]
final class Singleton {

// Statische Variable welche die Instanz hält
private static $instance = NULL;

// Konstruktor private, damit die Klasse nur aus sich selbst heraus instanziiert werden kann
private function __construct() {}

// Anlegen und zurückgeben der Instanz
public static function getInstance() {

if (self::$instance === NULL) {
self::$instance = new self;
}
return self::$instance;
}

// Verhindert das Clonen von außen
private function __clone() {}
}

$singleton = Singleton::getInstance();
[/php]

Häufig wird dieses Singleton eingesetzt um eine Datenbank Verbindung über einen zentralen Zugriffspunkt zu steuern. Hier auch der Beispielcode, wie ich eine solche Implementierung realisiert habe:

[php]
require_once ‚Zend/Db.php‘;
require_once ‚Zend/Db/Adapter/Pdo/Mysql.php‘;
require_once ‚Zend/Registry.php‘;

class Wsmm_Core_Data
{
/**
* @var array
*/
private static $_adapters;

/**
* Singleton. Connects to the database.
*
* @return Zend_Db_Adapter_Pdo_Mysql
*/
public static function getAdapter($db = ‚default‘)
{
if (isset(self::$_adapters[$db]) == false) {
try {
//lesen der Konfiguration aus den Settings und erzeugen des Adapters
self::$_adapters[$db] = new Zend_Db_Adapter_Pdo_Mysql(Zend_Registry::get(‚config‘)->db->$db);
self::$_adapters[$db]->setFetchMode(Zend_Db::FETCH_OBJ);
self::$_adapters[$db]->getConnection()->exec("SET NAMES ‚utf8’");
} catch (Exception $e) {
//error handling
}
}

return self::$_adapters[$db];
}
}
[/php]