Zend Framework 1.8: Zend_Loader::registerAutoload ist veraltet

Bei einem meiner alten PHP-Projekte bin ich beim Update auf Zend Framework 1.8 gerade drauf gestoßen, dass ein paar Methoden des Zend_Loader als deprecated markiert wurden:

Notice: Zend_Loader::Zend_Loader::registerAutoload is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead in /path/to/Zend/Loader.php on line 23

Notice: Zend_Loader::Zend_Loader::autoload is deprecated as of 1.8.0 and will be removed with 2.0.0; use Zend_Loader_Autoloader instead in /path/to/Zend/Loader.php on line 42

Werbung


Ich hatte im Code folgende Zeilen verwendet:

require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

Dies muss einfach nur durch folgende Zeilen ersetzt werden:

require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();

Die weiteren Konfigurationen sind in der Dokumentation des Autoloaders nachzulesen.

Hat man im library-Ordner beispielsweise noch eigene Libraries im Ordner Wolfuli abgelegt, so muss man diese im Namespace hinzufügen:

$autoloader->registerNamespace('Wolfuli_');

Update:
In Zend Framework 1.8.1 wurde ein Proxy von Zend_Loader::registerAutoload() auf Zend_Loader_Autoloader eingerichtet, der auch gleichzeitig den FallbackAutoloader setzt.

Veröffentlicht von

Uli

IT-Nerd und Admin

5 Gedanken zu „Zend Framework 1.8: Zend_Loader::registerAutoload ist veraltet“

  1. Statt Namespaces einzeln zu registrieren kannst du auch den Fallback-Autoloader verwenden, der das „alte“ Verhalten wiederherstellt.

    // Load all namespaces
    $autoloader->setFallbackAutoloader(true);

    1. Das ist richtig, so ist es auch in der Dokumentation festgehalten. Meines Erachtens ist es jedoch gewünscht, dass man das neue Verhalten anwendet und die Namespace einzeln definiert (so viele sind es ja im Regelfall nicht) um die Performance zu steigern. Für Kompatibilität zu „alten“ Anwendungen kann man natürlich einfach den Fallback verwenden.

  2. hallo uli,

    was bedeutet das genau, dass die Namespaces einzeln definiert werden müssen. Kann ich das gesammelt alles in der bootstrap und/oder im Initializer machen oder muss ich da im Zweifelsfall durch alle Controller durch? Bezieht sich das nur auf extra Ordner im library-Verzeichnis? Wie gross ist der Performance-Unterschied in der Praxis?

    Fragen über Fragen … sorry, bin noch nicht ganz so fit in dem Thema.

    Beste Grüsse
    Rel

    1. Hi,

      wenn du dir einen ordner im libary-Verzeichnis anlegst, in dem du deine generellen Klassen anlegst, so musst du diesen angeben.

      Beispielsweise liegen bei mir:

      |- application
      |- library
      |- public

      auf der ersten Ordnerebene (wie von Zend_Tool erstellt).

      Im Ordner library habe ich das Zend Framework und meinen eigenen library-Ordner namens Wolfuli abgelegt:

      |- library
      |-- Wolfuli
      |-- Zend

      Damit dieser gefunden wird, gebe ich wie oben gezeigt den Namespace „Wolfuli“ dazu. Das kann im Bootstrap oder mit Zend_Application auch über die application.ini geschehen.

      Hoffe das hilft dir weiter.

      Viele Grüße,
      Uli

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.