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.

6 Bemerkungen zu “PHP autoload und Namespaces

Schreibe einen Kommentar

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