Ich habe diese autoloader Klasse, um classes
zu initialisieren, aber jetzt möchte ich auch interfaces
und abstracts
automatisch laden.
Also habe ich die Änderung nach dieser Antwort gemacht,
%Vor%Ich habe es getestet, aber diese Autoloader -Klasse lädt keine Schnittstellen. Irgendwelche Ideen was ich vermisst habe?
Zum Beispiel ist das meine Interface-Datei,
%Vor%und sein Inhalt,
%Vor%Unten ist meine gesamte Autoloader Klasse.
%Vor%PHP macht keinen Unterschied zwischen Klassen oder Interfaces oder abstrakten Klassen. Die Autoloader-Funktion, die Sie definieren, erhält immer den Namen der zu ladenden Sache, und keine Art von Hinweis, welche es war.
So kann Ihre Benennungsstrategie nicht automatisch geladen werden, weil Sie Interfaces mit "interface_" und Klassen mit "class_" vorangestellt haben. Ich finde eine solche Namenskonvention eher ärgerlich.
Auf der anderen Seite ist Ihr Autoloader völlig unperformant. Es scannt ganze Verzeichnisbäume rekursiv, nur um eine Klasse zu finden! Und die nächste Klasse muss die ganze Arbeit wieder tun, ohne den Vorteil, dass sie es vorher getan hat!
Bitte implementieren Sie einen PSR-0 Autoloader, wenn Sie es wirklich selbst machen wollen (und nicht Dinge wie Komponisten dafür verwenden) Sie) und bleiben Sie bei diesem Namensschema für Klassen und Schnittstellen.
Und wählen Sie bitte ein unterscheidendes Klassenname-Präfix oder einen Namensraum, und prüfen Sie als ersten Schritt in Ihrem Autoloader, ob die zu ladende Klasse dieses Präfix hat. Kehre sofort zurück, wenn dies nicht der Fall ist. Dies befreit Sie davon, die Festplatte zu drehen und zu sehen, ob der Dateiname für die Klasse existiert.
Wenn das Präfix nicht übereinstimmt, ist es nicht "Ihre" Klasse, die geladen werden möchte, also kann Ihr Autoloader nicht wissen, wie es geht und sollte es nicht einmal versuchen, aber ein anderer Autoloader, der registriert wurde, wird es wissen / p>
Tags und Links php spl-autoloader