| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.session.basic_usage">
- <title>Grundsätzliche Verwendung</title>
- <para>
- <classname>Zend_Session_Namespace</classname> Instanzen stellen die primäre
- <acronym>API</acronym> 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.
- <classname>Zend_Session</classname> verwendet die Erweiterung ext/session und dessen
- spezielle superglobale Variable <varname>$_SESSION</varname> als Speichermechanismus für
- Session Daten. Wärend <varname>$_SESSION</varname> im globalen Namensraum von
- <acronym>PHP</acronym> noch immer vorhanden ist, sollten Entwickler davon absehen diese
- direkt zu verwenden, damit <classname>Zend_Session</classname> und
- <classname>Zend_Session_Namespace</classname> am effizientesten und sichersten Ihre Sammlung
- von Session relevanten Funktionen bereitstellen können.
- </para>
- <para>
- Jede Instanz von <classname>Zend_Session_Namespace</classname> korrespondiert mit einem
- Eintrag des Superglobalen Arrays <varname>$_SESSION</varname>, wobei die Namensräume als
- Schlüssel verwendet werden.
- </para>
- <programlisting language="php"><![CDATA[
- $myNamespace = new Zend_Session_Namespace('myNamespace');
- // $myNamespace corresponds to $_SESSION['myNamespace']
- ]]></programlisting>
- <para>
- Es ist möglich <classname>Zend_Session</classname> in Verbindung mit anderem Code zu
- verwenden welche <varname>$_SESSION</varname> direkt verwendet. Um Probleme zu vermeiden
- wird trotzdem stärkstens empfohlen das solcher Code nur Teile von
- <varname>$_SESSION</varname> verwendet die nicht mit Instanzen von
- <classname>Zend_Session_Namespace</classname> korrespondieren.
- </para>
- <sect2 id="zend.session.basic_usage.basic_examples">
- <title>Übungs Beispiele</title>
- <para>
- Wenn kein Namensraum bei der Instanziierung von
- <classname>Zend_Session_Namespace</classname> definiert wurde, werden alle Daten
- transparent in einem Namensraum gespeichert der "<code>Default</code>" heißt.
- <classname>Zend_Session</classname> ist nicht dazu gedacht um direkt mit den Inhalten
- von Containern der Session Namensräume zu arbeiten. Stattdessen wird
- <classname>Zend_Session_Namespace</classname> verwendet. Das folgende Beispiel
- demonstriert die Verwendung dieses Standard Namensraums und zeigt wie die Anzahl der
- Zugriffe eines Benutzers gezählt werden kann.
- </para>
- <example id="zend.session.basic_usage.basic_examples.example.counting_page_views">
- <title>Seitenzugriffe zählen</title>
- <programlisting language="php"><![CDATA[
- $defaultNamespace = new Zend_Session_Namespace('Default');
- if (isset($defaultNamespace->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;
- ]]></programlisting>
- </example>
- <para>
- Wenn mehrere Module Instanzen von <classname>Zend_Session_Namespace</classname>
- verwenden die verschiedene Namensräume haben, erhält jedes Modul Datenkapselung für die
- eigenen Daten der Session. Dem <classname>Zend_Session_Namespace</classname> Konstruktor
- kann ein optionales <varname>$namespace</varname> 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.
- </para>
- <para>
- Namen für Namensräume sind limitiert auf Sequenzen von Zeichen die als nicht leere
- <acronym>PHP</acronym> Strings dargestellt werden und nicht mit einem Unterstrich
- ("<code>_</code>") Zeichen beginnen. Nur Kern Komponenten die im Zend Framework
- inkludiert sind sollten Namen für Namensräume der wenden die mit "<code>Zend</code>"
- beginnen.
- </para>
- <example id="zend.session.basic_usage.basic_examples.example.namespaces.new">
- <title>Neuer Weg: Namensräume verhindern Kollisionen</title>
- <programlisting language="php"><![CDATA[
- // In der Zend_Auth Komponente
- require_once 'Zend/Session.php';
- $authNamespace = new Zend_Session_Namespace('Zend_Auth');
- $authNamespace->user = "meinbenutzername";
- // In einer Web Service Komponente
- $webServiceNamespace = new Zend_Session_Namespace('Mein_Web_Service');
- $webServiceNamespace->user = "meinwebbenutzername";
- ]]></programlisting>
- </example>
- <para>
- 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.
- </para>
- <example id="zend.session.basic_usage.basic_examples.example.namespaces.old">
- <title>Alter Weg: PHP Session Zugriff</title>
- <programlisting language="php"><![CDATA[
- $_SESSION['Zend_Auth']['user'] = "meinbenutzername";
- $_SESSION['Some_Web_Service']['user'] = "meinwebbenutzername";
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.session.basic_usage.iteration">
- <title>Session Namensräume wiederholen</title>
- <para>
- <classname>Zend_Session_Namespace</classname> stellt das komplette <ulink
- url="http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html">IteratorAggregate
- Interface</ulink> zur Verfügung, was die Unterstützung der <code>foreach</code>
- Anweisung beinhält:
- </para>
- <example id="zend.session.basic_usage.iteration.example">
- <title>Session wiederholen</title>
- <programlisting language="php"><![CDATA[
- $aNamespace =
- new Zend_Session_Namespace('Einige_Namensräume_Mit_aktuellen_Daten');
- foreach ($aNamespace as $index => $value) {
- echo "aNamespace->$index = '$value';\n";
- }
- ]]></programlisting>
- </example>
- </sect2>
- <sect2 id="zend.session.basic_usage.accessors">
- <title>Zugriffsfunktionen für Session Namensräume</title>
- <para>
- <classname>Zend_Session_Namespace</classname> implementiert die <ulink
- url="http://www.php.net/manual/de/language.oop5.overloading.php">magischen
- Methoden</ulink> <methodname>__get()</methodname>, <methodname>__set()</methodname>,
- <methodname>__isset()</methodname>, und <methodname>__unset()</methodname> welche nicht
- direkt angesprochen werden sollte, ausser von innerhalb einer Subklasse. Stattdessen
- verwenden die normalen Opteratoren automatisch diese Methoden, wie im folgenden
- Beispiel:
- </para>
- <example id="zend.session.basic_usage.accessors.example">
- <title>Zugriff auf Session Daten</title>
- <programlisting language="php"><![CDATA[
- $namespace = new Zend_Session_Namespace(); // Standard Namensraum
- $namespace->foo = 100;
- echo "\$namespace->foo = $namespace->foo\n";
- if (!isset($namespace->bar)) {
- echo "\$namespace->bar nicht gesetzt\n";
- }
- unset($namespace->foo);
- ]]></programlisting>
- </example>
- </sect2>
- </sect1>
|