wie titel schon sagt:global in funktionen und klassen hat nichts zu suchen[/b]
die gloable Variablen können viele Probleme verursachen, da bei den grossen Scripts wird die kontrolle über der Anzahl und die Namen von Variablen oft unübersichtlich und kann schnell bei zu Überschneidungen kommen. Aus diesem Grund wurde auch bei PHP5 Register-Globals auf 'OFF' gesetzt und für die Variablen die Namensräume an Hand von Herkunft zugewiesen ($_SERVER, $_COOKIE,$_GET,$_POST,$_FILES) und als letzter Versteck $GLOBALS.
Wer PHP5 nutzt, kann jetzt sich selbst ein "Schrank" für die Variablen schafen und von überall auf die Variablen von beliebigen Typen lesend und schreibend zuzugreifen. Dank modifer 'static' und einem wirklich sinnvollem Einsatz von Singelton-Pattern wurde für diese Technik schon eine Name vergeben "Registry".
Hier presentiere ich meine primetive Registry, die ich für die pivate als auch die geschäftliche Zwecke immer wieder benutze.
| Php: |
<?php
/**
* Class BU_Registry
* globaler Behaelter fuer die Variablen und objecten, der statt global verwendet wird
* Singelton
* @autor Slava
* @example
* //instanzieren
* $r=BU_Registry::getInstance();
* $r->ding=new stdClass();
* $r->ding->test='hallo wellt';
*
* //und dann irgendwo in einer funktion oder anderer stelle
* $a=BU_Registry::getInstance();
* if(isset($a->ding->test))
* echo $a->ding->test;
*
*/
class BU_Registry
{
/**
* behaelter fuer die objecte und variablen
* @staticvar registry
* @access protected
*/
/**
* factory singelton methode zum aufrufen von BU_Registry instance
*
* @return BU_Registry
*/
public static function getInstance ()
{
if(! isset(self:: $registry))
self::$registry=new self();
return self::$registry;
}
/**
* konstructor
* @access private
*/
private function __construct()
{
self::$registry=new stdClass();
}
/**
* magische methode __get
*
* @param string $was
* @return mixed
*/
public final function __get($was)
{
return self::$registry->$was;
}
/**
* magische methode __set
*
* @param string $was
* @param mixed $wert
*/
public final function __set($was,$wert)
{
self::$registry->$was=$wert;
}
/**
* magische methode __isset
*
* @param string $was
* @return bool
*/
public final function __isset($was)
{
return isset(self:: $registry-> $was);
}
}#end class BU_Registry
?>
|