[size=10]im englischen Original von [[http://www.php-fig.org/psr/psr-0/|PHP-FIG PSR-0]][/size] ====== Autoloading Standard ====== Im Folgenden werden die verbindlichen Anforderungen, die für die Interoperabilität der Autoloader eingehalten werden müssen beschrieben. ===== Verbindliches ===== * Ein voll qualifizierter Namespace und Klassenname muss die folgende Struktur haben: ''\\(\)*'' * Jeder Namespace muss einen Top-Level Namespace ("Vendor Name") haben. * Jeder Namespace kann beliebig viele Unter-Namespaces definieren. * Jeder Namespace-Trenner wird beim Laden vom Dateisystem in einen DIRECTORY_SEPARATOR konvertiert. * Jeder **_** im Klassennamen wird zu einem DIRECTORY_SEPARATOR konvertiert. :!: //Anpassung für WB:// Der **_** hat keine spezielle Bedeutung in der __normalen__ Definition eines Namespace, bei Pseudo-Namespaces (siehe [[dev:all:psr:psr-1|PSR-1]]) wird er jedoch in einen DIRECTORY_SEPERATOR umgewandelt, was in diesem Fall Ordner- und Dateinamen mit **_** verbietet. * Der voll qualifizierte Namespace und Klassennamen wird beim Zugriff auf das Dateisystem um die Endung **.php** ergänzt. * Alphabetische Zeichen (A-Z) in Vendornamen, Namespaces und Klassen können jede beliebige Kombination aus Gross- und Kleinbuchstaben sein. :!: In [[dev:all:psr:psr-1|PSR-1]] wird dieses noch eingeschränkt! ===== Beispiele ===== \Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php \Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php \Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php ===== Unterstriche in Namespaces and Klassennamen ===== \namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php Die Standards die wir hier setzen sollten der kleinste gemeinsame Nenner zum problemlosen Zusammenspiel der Autoloader sein. Mit der Beispielimplementation des SplClassLoader können Sie testen, ob ihre Implementation den Standards entspricht. ===== Beispiel Implementation ===== Unten ist eine einfache Beispiel-Funktion, die aufzeigen soll, wie die oben vorgeschlagenen Standards automatisch geladen werden. ===== SplClassLoader Implementation ===== Die folgende GIST ist eine Beispielimplementierung, wie SplClassLoader Ihre Klassen laden können, wenn sie den oben vorgegebenen Standards folgen. Es ist der aktuell empfohlene Weg, um PHP-5.3 Klassen zu laden. [[http://gist.github.com/221634|gist.github.com/221634]]