Eine weitere magic-Function ist die __autoload() Funktion.
Sie ermöglicht das automatische Nachladen von Dateien und soll den Einsatz von inlcude() und require() ablösen. Die Voraussetzung für den Einsatz von __autoload() ist eine objektorientierte Programmierung mit einer klaren und stringenten Strukturierung.
Wird ein Objekt einer Klasse instanziiert, welche nicht eingebunden ist, wir die __autoload()-Funktion aufgerufen, gleiches gilt für extends und implements. Als Parameter bekommt Sie den Klassennamen übergeben.
function __autoload($s_klassenname)
{
require($s_klassenname.'php');
}
Aus dem übergebenen Klassennamen werden nun entsprechend der Programmierung der Funktion der Pfad und der Name der zu inkludierenden Quelldatei genieriert und diese eingebunden.
Hierbei muss der Programierer dafür Sorge tragen, dass dies nicht zu unerwünschten Ergebnissen führt, so kann zum Beispiel bei mangelhafter Prüfung auch eine URL übergeben und so eine Datei von einem fremden Server inkludiert werden, was eine nicht unterhebliche Gefährdung der Webanwendung nach sich zieht.
Hier sind also die üblichen Vorsichtsmaßnahmen zu treffen: Gültigkeitsprüfung mit Regulären Ausdrücken, Existenzprüfung z.Bsp. mit file_exists() und Kontrolle, ob die einzubindende Datei auch die Klassendefinition enthält class_exists().
try
{
if(FALSE === RegEx)
{
throw new Exception("Klassenname $s_klassenname ist ungültig");
}
else
{
require_once($s_klassenname);
}
}
catch(Exception $e)
{
die($e->getMessage());
}
Diese Art der Programmierung erfordert jedoch ein hohes Maß an Organisation, durch unbedachtes Bennenen von Dateien und Klassen kann die Fehlersuche deutlich erschwert werden. Außerdem muss darauf geachtet werden gewissen Konventionen beim Anlegen und Verwenden von Pfaden eingehalten werden, die jedem Programmierer in einem Projekt bekannt sein müssen. Auch in Hinblick auf die möglichen Sicherheitsimplikationen sollte die Verwendung von __autoload() gut überdacht werden.