Code:
function __autoload($Klassenname) {
$Datei = suche_PhpDatei_in_welcher_die_Klasse_enthalten_ist($Klassenname);
require($Datei);
}
// registriert sich automatisch, über seinen Funktionsnamen
oder besser doch
Code:
function MeinAutoKlassenlader($Klassenname) {
// das kann auch eine statische Klassenmethode sein
$Datei = suche_PhpDatei_in_welcher_die_Klasse_enthalten_ist($Klassenname);
require($Datei);
}
spl_autoload_register('MeinAutoKlassenlader, true);
oder
Code:
function MeinAutoKlassenlader($Klassenname, $ListeDerRegistriertenDateiendungen) {
// das kann auch eine statische Klassenmethode sein
$Datei = suche_PhpDatei_in_welcher_die_Klasse_enthalten_ist($Klassenname, $ListeDerRegistriertenDateiendungen);
require($Datei);
}
spl_autoload_register('MeinAutoKlassenlader, true);
jetzt einfach eine Klasse verwenden, welche noch nicht existiert
- zugehörige Datei wurde noch nicht geladen (require/include)
Code:
$Test = new IrgendeineKlasse();
nun wird also die registrierte Funktion aufgerufen, darin die benötigte Datei geladen und dann kann's weitergehn.
eigentlich recht nette sache
hab mir nun selber einen kleinen Autolader geschrieben
oder man verwendet halt den vordefinierten Autoloader und steuert ihn über
set_include_path, spl_autoload_extensions und Co.
Dieser nimmt z.B. den Klassennamen und versucht sich daraus einen kleichnamigen Dateinamen zu basteln
(sowas geht aber nicht, wenn die Dateien nicht wie die Klasse heißen und/oder man mehrere Klassen in einer Datei liegen hat)
Klasse "statistics" in "./classes/statistics.class.php"
= suchpfad "./classes/"
= dateiendung ".class.php"
dann kann das require_once('./classes/statistics.class.php'); weg
und auch alles, welches diesem Muster entspricht