Grundsätzliche Verwendung
Zend_Session_Namespace Instanzen stellen die primäre API für das
Manipulieren von Session Daten im Zend Framework bereit. Namensräume werden verwendet um
alle Session Daten zu kapseln, aber es existiert auch ein Standard Namensraum für jene die
nur einen Namensraum für alle Session Daten benötigen. Zend_Session
verwendet die Erweiterung ext/session und dessen spezielle superglobale Variable
$_SESSION als Speichermechanismus für Session Daten. Wärend
$_SESSION im globalen Namensraum von PHP noch immer vorhanden ist, sollten
Entwickler davon absehen diese direkt zu verwenden, damit
Zend_Session und Zend_Session_Namespace am
effizientesten und sichersten Ihre Sammlung von Session relevanten Funktionen bereitstellen
können.
Jede Instanz von Zend_Session_Namespace korrespondiert mit einem
Eintrag des Superglobalen Arrays $_SESSION, wobei die Namensräume als Schlüssel
verwendet werden.
Es ist möglich Zend_Session in Verbindung mit anderem Code zu verwenden welche
$_SESSION direkt verwendet. Um Probleme zu vermeiden wird trotzdem stärkstens
empfohlen das solcher Code nur Teile von $_SESSION verwendet die nicht mit
Instanzen von Zend_Session_Namespace korrespondieren.
Übungs Beispiele
Wenn kein Namensraum bei der Instanziierung von
Zend_Session_Namespace definiert wurde, werden alle Daten
transparent in einem Namensraum gespeichert der "Default" heißt.
Zend_Session ist nicht dazu gedacht um direkt mit den Inhalten
von Containern der Session Namensräume zu arbeiten. Stattdessen wird
Zend_Session_Namespace verwendet. Das folgende Beispiel
demonstriert die Verwendung dieses Standard Namensraums und zeigt wie die Anzahl der
Zugriffe eines Benutzers gezählt werden kann.
Seitenzugriffe zählen
numberOfPageRequests)) {
// Das erhöht den Zählen für jeden Seitenaufruf
$defaultNamespace->numberOfPageRequests++;
} else {
$defaultNamespace->numberOfPageRequests = 1; // Erster Zugriff
}
echo "Seitenzugriffe in dieser Session: ",
$defaultNamespace->numberOfPageRequests;
]]>
Wenn mehrere Module Instanzen von Zend_Session_Namespace
verwenden die verschiedene Namensräume haben, erhält jedes Modul Datenkapselung für die
eigenen Daten der Session. Dem Zend_Session_Namespace Konstruktor
kann ein optionales $namespace Argument übergeben werden, welches
Entwicklern erlaubt Session Daten in eigene Namensräume zu partitionieren. Die
Verwendung von Namensräumen ist ein effektiver und populärer Weg um Session Daten
gegenüber Änderungen durch ungewollte Namenskollisionen sicher zu machen.
Namen für Namensräume sind limitiert auf Sequenzen von Zeichen die als nicht leere PHP
Strings dargestellt werden und nicht mit einem Unterstrich ("_") Zeichen
beginnen. Nur Kern Komponenten die im Zend Framework inkludiert sind sollten Namen für
Namensräume der wenden die mit "Zend" beginnen.
Neuer Weg: Namensräume verhindern Kollisionen
user = "meinbenutzername";
// In einer Web Service Komponente
$webServiceNamespace = new Zend_Session_Namespace('Mein_Web_Service');
$webServiceNamespace->user = "meinwebbenutzername";
]]>
Das obige Beispiel erzielt den gleichen Effekt wie der folgende Code, ausser das die
obigen Session Objekte die Kapselung der Session Daten innerhalb des jeweiligen
Namensraumes aufrecht erhält.
Alter Weg: PHP Session Zugriff
Session Namensräume wiederholen
Zend_Session_Namespace stellt das komplette IteratorAggregate
Interface zur Verfügung, was die Unterstützung der foreach
Anweisung beinhält:
Session wiederholen
$value) {
echo "aNamespace->$index = '$value';\n";
}
]]>
Zugriffsfunktionen für Session Namensräume
Zend_Session_Namespace implementiert die magischen Methoden
__get(), __set(), __isset(), und
__unset() welche nicht direkt angesprochen werden sollte, ausser von
innerhalb einer Subklasse. Stattdessen verwenden die normalen Opteratoren automatisch
diese Methoden, wie im folgenden Beispiel:
Zugriff auf Session Daten
foo = 100;
echo "\$namespace->foo = $namespace->foo\n";
if (!isset($namespace->bar)) {
echo "\$namespace->bar nicht gesetzt\n";
}
unset($namespace->foo);
]]>