Sven Rautenberg: spl_autoload_unregister

Beitrag lesen

Moin!

Benutze ich spl_autload_unregister/register vorher/nachher, geht alles in Ordnung, sieht so aus:

Das ist ein Indiz für fehlerhaftes Verhalten deines Autoloaders, denn damit basteltst du an der Reihenfolge der Autoload-Funktionen herum.

... darf eine autoload_function wohl keine Exception werfen. Die Frage ist dann: Wie fange ich einen etwaigen Fehler auf?

An welche Fehler denkst du?

Deine Autoload-Funktion hat eine ziemlich genau umrissene Funktion: Sie bekommt den Namen einer gewünschten Klasse, eines Interfaces oder eines Traits (ab 5.4) und muss dazu die passende Datei finden und einbinden.

Was kann dabei schiefgehen?

Erstens: Für den gewünschten Namen ist die Funktion gar nicht zuständig.
Dann: Nichtstun.

Zweitens: Für den Namen ist die Funktion zuständig, kann die Datei aber nicht finden.

Dann Möglichkeit A: Nichtstun. PHP wird das Fehlen der gewünschten Klasse bemerken und den Programmablauf abbrechen.

Möglichkeit B: Du kannst natürlich versuchen, anhand des Klassennamens irgendwas hinzuhexen. Eine Autoload-Funktion darf den Klassencode nicht nur mit include/require bekannt machen (die *_once-Varianten sind überflüssig, weil einmal bekannte Klassen nicht noch ein zweites Mal den Autoloader triggern), sondern auch via eval(). Das allerdings wäre definitiv etwas, was man trennen sollte. De fakto ist zu diesem Zeitpunkt deine Applikation kaputt, denn sie will Code verwenden, der nicht existiert. Sorge dafür, dass das nicht passiert - sowas fällt schnell auf.

- Sven Rautenberg