PHP Autoloader Eigenschaften

Namespaces

Seit PHP 5.3 gibt es Namespaces. Der Autoloader unterstützt Namespaces vollständig. Auch wenn mehrer Namespaces in einer Datei verwendet werden, findet der Autoloader die Klassen mit ihrem jeweiligen Namespace. Für den Autoloader spielt es keine Rolle ob die geklammerte Syntax oder die einfache Syntax verwendet wird.

Indexbasierte Klassensuche

Zum schnellen finden einer einmal gefundenen Klassendefinition pflegt der Autoloader einen Index. Der Index wird automatisch aktualisiert wenn eine Klassendefinition entfernt, verschoben oder neu hinzugekommen ist. Folgende Indexstrukturen werden unterstützt:

Optimierte Dateisuche

Wenn eine Klassendefinition noch nicht im Index hinterlegt ist muss das Dateisystem einmalig nach der Definition durchsucht werden. Dabei werden Dateien, die dem Klassennamen ähneln und mit den Endungen .php und .inc enden bevorzugt. Es werden selbstverständlich auch alle anderen Dateien nach der Klassendefinition durchsucht. Allerdings geschieht dies erst nach den potentiellen Kandidaten.

Klassenkonstruktor

Nach dem Einbinden der Klassendefinition wird falls vorhanden der Klassenkonstruktor __static() classConstructor() aufgerufen. PHP selbst kennt keinen Klassenkonstruktor. Ein Klassenkonstruktor wird anders als der Objektkonstruktor __construct() nur einmalig für eine Klasse aufgerufen. Er befindet sich mit der Definition public static function classConstructor() im statischen Klassenkontext. Dies kann z.B. nützlich sein um Klassenattribute zu initialisieren:

<?php

class Singleton
{

    
/**
     * @var Singleton
     */
    
private static $_instance;

    public static function 
classConstructor()
    {
        
self::$_instance = new self();
    }

    
/**
     * @return Singleton
     */
    
public static function getInstance()
    {
        return 
self::$_instance;
    }

    private function 
__construct()
    {

    }

    private function 
__clone()
    {

    }

}

Mehrfachverwendung

Es können mehrere Autoloader gleichzeitig benutzt werden. Der Autoloader berücksichtigt die Existenz anderer Autoloader. Dabei spielt es keine Rolle ob es fremde Autoloader, dieser Autoloader oder gar dieser Autoloader aus einer anderen Stelle im Dateisystem ist. Es wäre z.B. denkbar, dass eine Komponente eines Drittanbieters mit diesem Autoloader ausgeliefert wurde und somit doppelt deklariert würde. Bevor der Autoloader seine eigenen Klassen definiert, vergewissert er sich, dass sie nicht schon existieren.