PHP autoload und Namespaces

Seit der Version 5.3 unterstützt PHP nun ja auch Namespaces, was eigentlich auch eine gute Sache ist. Immerhin kann man so auf wilde Präfixe vor seinen Klassennamen verzichten. Allerdings machen Namespaces das Autoloading wesentlich unangenehmer. Insbesondere wenn man sowohl Klassen ohne namespaces als auch solche mit namespaces unterstützen muss oder will.

Ich habe den Autoloader aus dem Kristall Tutorial so erweitert, dass er auch mit namespaces umgehen kann. Grundvoraussetzung ist weiterhin, dass Dateiname und Klassenname übereinstimmen – also genau wie vorher auch. Allerdings muss der verwendete Namespace mit einem der Übergebenen Startverzeichnisse übereinstimmen.

Beispiele sind, für mich jedenfalls, immer irgendwie aussagekräftiger als allgemeine Erklärungen, daher ein Beispiel:

Bootstrap-Datei und Autoloader liegen im Basisverzeichnis ‘/var/www/meinePHPAnwendung/bootstrap.php

 

// /var/www/meinePHPAnwendung/bootstrap.php
require 'Autoload.php';

Autoload::init(array(__DIR__));

Dann haben wir eine Klasse ‘Base‘ mit dem Namespace ‘MyApp\Classes‘ woraus intern dann die Klasse ‘MyApp\Classes\Base‘ wird. Um den Autoloader einsetzen zu können, muss diese Klasse im Verzeichnis ‘/var/www/meinePHPAnwendung/MyApp/Classes‘ liegen und den Dateinamen ‘Base.php‘ haben. Ist das der Fall wird der Autoloader die Datei finden und per require laden können.

Den Autoloader könnt ihr euch hier herunterladen.

Zuletzt gefunden unter folgenden Begriffen:

3 comments to "PHP autoload und Namespaces"

  1. Frank sagte am 19. Oktober 2011 um 08:38:

    Danke für die Info! Und für den Download!

  2. Martin sagte am 4. November 2011 um 12:33:

    Interessanter Beitrag! Auch ein Dankeschön von mir. Gruß Martin

  3. Uwe sagte am 14. November 2011 um 11:26:

    Hey, cool Danke für den Tipp! Probier ich gleich mal aus :-) Schönen Tag dir noch! Gruß Uwe

Hinterlasse einen Kommentar

Ihre E-Mail Addresse wird niemals veröffentlicht oder weitergegeben. Pflichtfelder sind gekennzeichnet.

Folgende HTML Tags und Attribute können verwendet werden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>