Inhaltsverzeichnis

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

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.

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