Um aus verschiedenen Klassen auf “globale Objekte” und Variablen zuzugreifen, gibt es das Registry-Entwurfsmuster. Die Registry-Klasse kann als “abstract” deklariert werden, da nur statische Attribute und Methoden in der Klasse verwendet werden.
Dies wird notwendig, wenn man z.B. sehr stark Schichten-Orientiert entwickelt: Die Aufteilung der Applikation in Schichten, die sich keine Daten teilen ist in der Theorie sehr schön – in der Praxis aber nicht sinnvoll umsetzbar. Um ein Objekt in mehreren Schichten zur Verfügung zu haben, müsste man diese bei den Methodenaufrufen durch die Schichten durchreichen, was die Methodensignaturen sehr schnell unübersichtlich werden lässt.
Wenn Sie also ein Objekt haben, deren Erstellung sehr teuer ist oder es davon nur eine Instanz (Singleton) geben darf und es Global benötigen, dann ist das Registry-Pattern die richtige Wahl.
<?php
abstract class Registry {
private static $registry = array();
public static function set($key, $value) {
if (!isset(self::$registry[$key])) {
self::$registry[$key] = $value;
return true;
} else {
throw new Exception('Unable to set variable `' . $key . '`. It was already set.');
}
}
public static function get($key){
if (isset(self::$registry[$key])) {
return self::$registry[$key];
}
return null;
}
public static function getAll() {
return self::$registry;
}
public static function remove($key){
if (isset(self::$registry[$key])) {
unset(self::$registry[$key]);
return true;
}
return false;
}
public static function removeAll(){
self::$registry = array();
return;
}
}
// Verwendung
Registry::set('test', 'Ich bin ueberall verfuegbar.');
echo Registry::get('test'); // Output: ich bin ueberall verfuegbar.
// Codebeispiel angelehnt an: http://www.phpbar.de/w/Registry
?>
Durch den Einsatz des Registry-Patterns wird der Gebrauch von globalen Variablen minimiert.
Hast du einen Teil deines Artikels zufällig von “PHP Design Patterns” abgeschrieben?
Ansonsten ne ganz nette Einführung
Pingback: Globale Variable oder Klassenvariable - PHP @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe
Pingback: Gültigkeit einer Klasse - php.de
Pingback: Gültigkeit einer Klasse - Seite 3 - php.de
Pingback: Variable in allen Klassen verfügbar/änderbar? - php.de