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]
Du muss angemeldet sein, um einen Kommentar zu veröffentlichen.