Introduction to Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  •  Zend_Gdata
  •  Zend_Http
  •  Zend_InfoCard
  •  Zend_Json
  •  Zend_Layout
  •  Zend_Ldap
  •  Zend_Loader
  •  Zend_Locale
  •  Zend_Log
  •  Zend_Mail
  •  Zend_Markup
  •  Zend_Measure
  •  Zend_Memory
  •  Zend_Mime
  •  Zend_Navigation
  •  Zend_Oauth
  •  Zend_OpenId
  •  Zend_Paginator
  •  Zend_Pdf
  •  Zend_ProgressBar
  •  Zend_Queue
  •  Zend_Reflection
  •  Zend_Registry
  •  Zend_Rest

  •  Zend_Search_Lucene
  •  Zend_Serializer
  •  Zend_Server
  •  Zend_Service
  •  Zend_Session
  •  Zend_Soap
  •  Zend_Tag
  •  Zend_Test
  •  Zend_Text
  •  Zend_TimeSync
  •  Zend_Tool
  •  Zend_Tool_Framework
  •  Zend_Tool_Project
  •  Zend_Translate
  •  Zend_Uri
  •  Zend_Validate
  •  Zend_Version
  •  Zend_View
  •  Zend_Wildfire
  •  Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 96.1% Update 2010-11-28 - Revision 23448 - Version ZF 1.11.x

    Chapter 58. Zend_Registry

    58.1. Die Registry verwenden

    Eine Registry ist ein Container für das Speichern von Objekten und Werten im Raum der Anwendung. Durch das Speichern der Werte in einer Registry steht das selbe Objekt immer innerhalb der kompletten Anwendung zur Verfügung. Dieser Mechanismus ist eine Alernative zur Verwendung eines Globalen Speichers.

    Die typische Methode um Registries mit dem Zend Framework zu verwenden ist durch die statischen Methoden in der Zend_Registry Klasse. Alternativ kann die Registry als Arrayobjekt verwendet werden, und so können Elemente welche darin gespeichert wurden durch ein gewöhnliches Array-artiges Interface verwendet werden.

    58.1.1. Werte in die Registry speichern

    Verwende die statische Methode set() um einen Eintrag in der Registry zu Speichern.

    Example 58.1. Beispiel der Verwendung der set() Methode

    Zend_Registry::set('index'$value);

    Der zurückgegebene Wert kann ein Objekt, ein Array oder ein Skalar sein. Der gespeicherte Wert in einem speziellen Eintrag der Registry kann durch den Aufruf der set() Methode verändert werden um den Eintrag auf einen neuen Wert zu setzen.

    Der Index kann ein Skalar (NULL, String oder Nummer), sowie ein gewöhnliches Array sein.

    58.1.2. Werte aus der Registry lesen

    Um einen Eintrag von der Registry zu erhalten, kann die statische get() Methode verwendet werden.

    Example 58.2. Beispiel der Verwendung der get() Methode

    $value Zend_Registry::get('index');

    Die getInstance() Methode gibt ein Singleton Registry Objekt zurück. Dieses Registry Objekt ist durchsuchbar, und erlaubt es auf alle in der Registry gespeicherten Werte einfach zuzugreifen.

    Example 58.3. Beispiel des Durchsuchens der Registry

    $registry Zend_Registry::getInstance();

    foreach (
    $registry as $index => $value) {
        echo 
    "Registry Index $index enthält:\n";
        
    var_dump($value);
    }

    58.1.3. Erstellen eines Registry Objektes

    Zusätzlich zur Verwendung der statischen Registry über die statischen Methoden, kann eine Instanz direkt erzeugt werden und als Objekt verwendet werden.

    Die Registry Instanz die durch die statischen Methoden verwendet wird, ist einfach eine solche Instanz. Es ist eine Vereinfachung die statisch gespeichert ist damit Sie von überall innerhalb einer Anwendung verwendet werden kann.

    Der traditionelle new Operator kann verwendet werden um Zend_Registry zu initiieren. Das Initiieren von Zend_Registry mit seinem Konstruktor initiiert auch die Einträge in der Registry einfach durch die Verwendung eines assoziativen Arrays als Argument.

    Example 58.4. Beispiel für das Erstellen einer Registry

    $registry = new Zend_Registry(array('index' => $value));

    Sobald so ein Zend_Registry Objekt initiiert wurde, kann es durch den Aufruf irgendeiner Array Objektmethode verwendet werden, oder indem es als Singleton Instanz für Zend_Registry mit der statischen Methode setInstance() gesetzt wird.

    Example 58.5. Beispiel der Initialisierung der Singleton Registry

    $registry = new Zend_Registry(array('index' => $value));

    Zend_Registry::setInstance($registry);

    Die setInstance() Methode wirft eine Zend_Exception wenn die statische Registry bereits initialisiert wurde.

    58.1.4. Auf die Registry als Array zugreifen

    Wenn mehrere Werte gesetzt oder gelesen werden sollen, kann es einfacher sein auf die Registry in Array Schreibweise zuzugreifen.

    Example 58.6. Beispiel eines Array-zugriffs

    $registry Zend_Registry::getInstance();

    $registry['index'] = $value;

    var_dump$registry['index'] );

    58.1.5. Zugriff auf die Registry als Objekt

    Manchmal ist es einfacher auf die Registry in einer Objekt-Orientierten Art und Weise zuzugreifen, durch Verwendung von Indexnamen als Objekt Eigenschaften. Man muß das Registry Objekt mit der ArrayObject::ARRAY_AS_PROPS Option erstellen und die statische Instanz initialisieren um diese Funktionalität einzuschalten.

    [Note] Note

    Man muß die ArrayObject::ARRAY_AS_PROPS Option setzen bevor auf die statische Registry das erste Mal zugegriffen wird.

    [Warning] Bekannte Probleme mit der ArrayObject::ARRAY_AS_PROPS Option

    Einige Versionen von PHP sind bekanntermaßen sehr fehlerhaft wenn die Registry mit der ArrayObject::ARRAY_AS_PROPS Option verwendet wird.

    Example 58.7. Beispiel eines Objektzugriffs

    // In der Anwendungs Bootstrap Datei:
    $registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS)
    Zend_Registry::setInstance($registry);
    $registry->tree 'Apfel';

    .
    .
    .

    // In einer anderen Funktion, irgendwo in der Anwendung:
    $registry Zend_Registry::getInstance();

    echo 
    $registry->tree// Gibt "Apfel" aus

    $registry->index $value;

    var_dump($registry->index);

    58.1.6. Abfragen ob ein Index existiert

    Um herauszufinden ob ein bestimmter Index in der Registry gesetzt wurde, kann die statische Methode isRegistered() verwendet werden.

    Example 58.8. Beispiel der Verwendung der isRegistered() Methode

    if (Zend_Registry::isRegistered($index)) {
        
    $value Zend_Registry::get($index);
    }

    Um herauszufinden ob ein bestimmter Index in einem Registry Array oder Objekt einen Wert hat kann die isset() Methode verwendet werden, wie bei einem gewöhnlichen Array.

    Example 58.9. Beispiel der Verwendung der isset() Methode

    $registry Zend_Registry::getInstance();

    // Verwendung der Array Syntax
    if (isset($registry['index'])) {
        
    var_dump$registry['index'] );
    }

    // Verwendung der Objekt Syntax
    if (isset($registry->index)) {
        
    var_dump$registry->index );
    }

    58.1.7. Erweitern der Registry

    Die statische Registry ist eine Instanz der Klasse Zend_Registry. Wenn Funktionalität zur Registry hinzugefügt werden soll, sollte eine Klasse erstellt werden die Zend_Registry erweitert und dann kann diese spezielle Klasse definiert werden um das Singleton in der statische Registry zu initiieren. Die statische Methode setClassName() kann verwendet werden um die Klasse zu definieren.

    [Note] Note

    Diese Klasse muß eine Unterklasse von Zend_Registry sein.

    Example 58.10. Beispiel des Definierens des Singleton Registry Klassennamens

    Zend_Registry::setClassName('Meine_Registry');

    Zend_Registry::set('index'$value);

    Die Registry wirft eine Zend_Exception wenn man versucht den Klassennamen zu setzen nachdem die Registry das erste Mal verwendet wurde. Es ist deshalb notwendig den Klassennamen für die statische Registry in der Bootstrap Datei der Anwendung zu definieren.

    58.1.8. Entfernen der statischen Registry

    Obwohl es normalerweise nicht notwendig ist, kann die Singleton Instanz der Registry entfernt werden. Die statische Methode _unsetInstance() verwendet werden, um das zu tun.

    [Warning] Risiko des Datenverlustes

    Wenn _unsetInstance() verwendet wird, werden alle Daten in der statischen Registry verworfen und können nicht wiederhergestellt werden.

    Diese Methode kann zum Beispiel verwendet werden, wenn setInstance() oder setClassName() nach der Initialisierung des Singleton Registry Objektes verwendet werden soll. Entfernen der Singleton Instanz erlaubt die Benutzung dieser Methoden selbst nachdem das Singleton Registry Objekt gesetzt wurde. Die Verwendung von Zend_Registry auf diese Weise ist für typische Anwendungen und Umgebungen nicht empfohlen.

    Example 58.11. Beispiel der Verwendung der _unsetInstance() Methode

    Zend_Registry::set('index'$value);

    Zend_Registry::_unsetInstance();

    // Ändern der Klasse
    Zend_Registry::setClassName('Meine_Registry');

    Zend_Registry::set('index'$value);

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...