Hallo zusammen,
ich nutze für ein Projekt das Registry Pattern in Kombination mit dem Singleton Pattern, um Variablen persistent abzulegen.
Dazu ein Ausschnitt aus der entsprechenden Klasse SessionRegistry:
Um von einer anderen Klasse auf die SessionRegistry zuzugreifen verwende ich im Konstruktor der Klasse
und im Code dann
bzw. dementsprechend auch
Mein Problem taucht nun beim schreibenden Zugriff auf (mehrdimensionale) Arrays auf
was semantisch Humbug darstellt und in der Registry unter Schlüssel "foo['bar']" das angegebene "$baz" ablegt.
Gibt es hierfür eine elegante Lösung? Leider stehe ich gerade auf dem Schlauch...
Unelegant wäre es das komplette (mehrdimensionale) Array temporär auszulesen, zu modifizieren und wieder komplett zurückzuschreiben a la
Grüßung und Bedankung
tr8000
ich nutze für ein Projekt das Registry Pattern in Kombination mit dem Singleton Pattern, um Variablen persistent abzulegen.
Dazu ein Ausschnitt aus der entsprechenden Klasse SessionRegistry:
PHP-Code:
class SessionRegistry
{
protected static $instance = null;
protected function __construct()
{
session_start();
if(!isset($_SESSION['__registry']))
{
$_SESSION['__registry'] = array();
}
}
private function __clone()
{
}
public static function getInstance()
{
if(self::$instance === null)
{
self::$instance = new SessionRegistry();
}
return self::$instance;
}
public function __set($name, $value)
{
$_SESSION['__registry'][$name] = $value;
}
public function __get($name)
{
if(isset($_SESSION['__registry'][$name]))
{
return $_SESSION['__registry'][$name];
}
return null;
}
public function __isset($name)
{
return isset($_SESSION['__registry'][$name]);
}
public function __unset($name)
{
unset($_SESSION['__registry'][$name]);
}
}
PHP-Code:
$this->SessionRegistry = SessionRegistry::getInstance();
PHP-Code:
$this->SessionRegistry->foo = $bar
PHP-Code:
$foo = $this->SessionRegistry->bar
PHP-Code:
// Aufruf
$this->SessionRegistry->foo['bar'] = $baz
// ergibt
$_SESSION['__registry'][foo['bar']] = $baz;
Gibt es hierfür eine elegante Lösung? Leider stehe ich gerade auf dem Schlauch...
Unelegant wäre es das komplette (mehrdimensionale) Array temporär auszulesen, zu modifizieren und wieder komplett zurückzuschreiben a la
PHP-Code:
$temp = $this->SessionRegistry->foo;
$temp['bar'] = $baz;
$this->SessionRegistry->foo = $temp
tr8000
Kommentar