Benutzer-Werkzeuge

Webseiten-Werkzeuge


dev:all:psr-0de

Dies ist eine alte Version des Dokuments!


im englischen Original von PHP-FIG PSR-0

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 Namensraum und Klassenname muss die folgende Struktur haben: \<Vendor Name>\(<Namespace>\)*<Class Name>
  • Jeder Namensraum muss einen Top-Level Namensraum („Vendor Name“) haben.
  • Jeder Namensraum kann beliebig viele Unter-Namensräume definieren.
  • Jeder Namensraum-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 Namensraumes, bei Pseudo-Namensräumen (siehe PSR-1) wird er jedoch in einen DIRECTORY_SEPERATOR umgewandelt, was in diesem Fall Ordnernamen mit _ verbietet.
  • Der voll qualifizierte Namensraum und Klassennamen wird beim Zugriff auf das Dateisystem um die Endung .php ergänzt.
  • Alphabetische Zeichen (A-Z) in Vendornamen, Namensräumen und Klassen können jede beliebige Kombination aus Gross- und Kleinbuchstaben sein. :!: In 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 Namensräumen 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.

ExampleAutoloader.php
<?php
 
function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
 
    require $fileName;
}

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.

gist.github.com/221634

Manuela v.d.Decken 12.08.2014 11:39

dev/all/psr-0de.1407840290.txt.gz · Zuletzt geändert: 03.06.2015 15:48 (Externe Bearbeitung)