Design Patterns in PHP - Teil 3: Das Registry Pattern

Das Registry Pattern wird sehr oft eingesetzt, um globale Variablen im Context mehrerer Objekte zu vermeiden. Stellen wir uns dieses Entwurfsmuster einfach als eine Art Datenspeicher vor.




Da es sinnvoll ist, hier ein Singleton zu benutzen, um sicherzustellen, dass alle Objekte auf den gleichen Datenspeicher zugreifen, werden wir das Singleton aus Teil2 wieder "erben" und um uns wieder ein wenig Tipparbeit zu ersparen, nutzen wir die Überladung in php:


  1. <?php
  2. abstract class Singleton {
  3.     protected function __construct() {}
  4.     final private function __clone() {}
  5.     final static public function init() {
  6.         static $instance = null;
  7.         return $instance ?: $instance = new static;
  8.     }
  9. }
  10.  
  11. class Registry extends Singleton {
  12.  
  13. 	// Unsere gespeicherten Daten:
  14. 	protected $__data = NULL;
  15.  
  16. 	// Der Konstruktor, wird über den vererbten
  17. 	// init-Aufruf des Singleton aufgegrufen
  18. 	protected __contruct() {
  19. 		// was auch immer hier getan werden muss
  20. 	}
  21.  
  22. 	// Nun nutzen wir die überladenen Standardmethoden:
  23.  
  24. 	// Der überladene Setter
  25. 	public function __set($strPropertyName, $mixedValue) {
  26. 		$this->__data[$strPropertyName] = $mixedValue;
  27. 	}
  28.  
  29. 	// Der Getter
  30. 	public function __get($strPropertyName) {
  31. 		return isset($this->__data[$strPropertyName]) ? $this->__data[$strPropertyName] : NULL;
  32. 	}
  33.  
  34. 	// Pruefen ob eine Property gesetzt ist:
  35. 	public function __isset($strPropertyName) {
  36. 		return isset($this->__data[$strPropertyName]);
  37. 	}
  38.  
  39. 	// Einen Wert aus der Registry loeschen:
  40. 	public function __unset($strPropertyName) {
  41. 		// Die isset-Klausel vermeidet Notices...
  42. 		if isset($this->__data[$strPropertyName]) unset($this->__data[$strPropertyName]);
  43. 	}
  44. }
  45. ?>



Nun können wir das Registry von überall nutzen:


  1. <?php
  2.  
  3. $myReg1 = Registry::init();
  4. $myReg1->Variable = 'Hallo Welt';
  5.  
  6. $myReg2 = Registry::init();
  7. echo $myReg2->Variable; // -> Hallo Welt;
  8.  
  9. if (isset($myReg1->Variable)) {
  10. 	unset($myReg1->Variable);
  11. } 
  12.  
  13. echo $myReg2->Variable; // -> NULL;
  14.  
  15. ?>




Im nächsten Teil werden wir das Factory-Pattern kennenlernen.

Neuen Kommentar schreiben

Plain text

  • Keine HTML-Tags erlaubt.
  • Internet- und E-Mail-Adressen werden automatisch umgewandelt.
  • HTML - Zeilenumbrüche und Absätze werden automatisch erzeugt.