| Registry Klasse - Session Scope |
|
Wenn man mit OOP zu hat, stolpert man früher oder später über das Registry-Pattern. Das Registry-Pattern ist ein Entwurfsmuster, dass einen Container für Informationen, also ein Ablageplatz für Daten, beschreibt. Normalerweise findet es seinen Einsatz beim programmieren mit Schichten, wie z.B. MVC oder HMVC. Ein Registry-Objekt wird davon gekennzeichnet, dass es global verfügbar ist und das es von der Registry-Klasse nur eine Instanz geben darf. Um beides zu gewährleisten, kommt das Singleton-Pattern zum Einsatz. <?php class Registry { /** * @var object Instance of registry class */ protected static $instance = NULL; /** * Get an instance of registry class * * @return object Instance of registry class */ public static function getInstance() { if (self::$instance === NULL) { self::$instance = new self(); } return self::$instance; } /** * Constructor - start session */ protected function __construct() { session_start(); if (isset( $_SESSION['_registry'] ) === FALSE) { $_SESSION['_registry'] = array(); } } /** * Clone - prevent additional instances of the class */ private function __clone() {} /** * Magic Method to set a registry variable * * @param string $key Registry array key * @param string $value Value of registry key * @return mixed TRUE on success otherwise FALSE */ public function __set( $key, $value ) { if (isset( $_SESSION['_registry'][$key] ) === FALSE) { $_SESSION['_registry'][$key] = $value; return TRUE; } return FALSE; } /** * Magic Method to get a registry variable * * @param string $key Registry array key * @return bool TRUE on success otherwise NULL */ public function &__get( $key ) { if (isset( $_SESSION['_registry'][$key] )) { return $_SESSION['_registry'][$key]; } return NULL; } /** * Unset a registry variable * * @param string $key Registry array key * @return bool TRUE on success otherwise FALSE */ public function __unset( $key ) { if (isset( $_SESSION['_registry'][$key] )) { unset( $_SESSION['_registry'][$key] ); return TRUE; } return FALSE; } /** * Reset registry * * @return bool TRUE */ public function reset() { $_SESSION['_registry'] = array(); return FALSE; } } ?> Hier ein kleines Anwendungsbeispiel: <?php error_reporting( 0 ); function __autoload( $class ) { $classname = strtolower( $class ); include_once( $classname . '.php' ); } // Instanz $registry = Registry::getInstance(); // Sub-Array Benutzer $registry->benutzer = array(); $registry->benutzer['vorname'] = 'Max'; $registry->benutzer['nachname'] = 'Mustermann'; $registry->benutzer['beruf'] = 'Maler'; $registry->benutzer['wohnort'] = 'Musterstadt'; // Sub-Array Config $registry->dbconfig = array(); $registry->dbconfig['host'] = 'localhost'; $registry->dbconfig['benutzer'] = 'root'; $registry->dbconfig['passwort'] = 'geheim'; $registry->dbconfig['port'] = 3306; // Normaler Vars $registry->vorname = 'Susi'; $registry->nachname = 'Sauer'; // Ausgabe SESSION echo "<pre>" . print_r( $_SESSION, TRUE ) . "</pre>"; ?> Die Ausgabe zu diesem Script: Array
(
[_registry] => Array
(
[benutzer] => Array
(
[vorname] => Max
[nachname] => Mustermann
[beruf] => Maler
[wohnort] => Musterstadt
)
[dbconfig] => Array
(
[host] => localhost
[benutzer] => root
[passwort] => geheim
[port] => 3306
)
[nachname] => Sauer
[wohnort] => Rosenheim
[beruf] => Designerin
[vorname] => Susi
)
)
Wie man sieht, gibt es im Array _registry noch weitere Arrays für benutzer und dbconfig, sowie einige lose Variablen. So wie man hier Informationen für z.B. benutzer zusammenfassen kann, so könnte man dort auch weitere Objekte von anderen Klassen darin ablegen. Um die Registry systemweit zu verwenden, lädt man einfach mit... $registry = Registry::getInstance(); ...eine Instanz der Registry Klasse und hat sofort Zugriff auf alle darin abgelegte Informationen. Registry Klasse (3 KB) |