Die Verwendung hat ein Problem, obwohl es bei weitem die schnellste Methode ist, erwartet es auch alle Ihre Dateinamen in Kleinbuchstaben.
spl_autoload_extensions(".php");
spl_autoload_register();
Zum Beispiel:
Eine Datei, die Klasse SomeSuperClass enthalten müßte somesuperclass.php genannt wird, ist dies ein Gotcha wenn ein Groß- und Kleinschreibung Dateisystem wie Linux verwenden, wenn Sie Ihre Datei mit dem Namen wird SomeSuperClass.php aber unter Windows kein Problem.
Die Verwendung von __autoload in Ihrem Code funktioniert möglicherweise immer noch mit aktuellen PHP-Versionen, erwartet jedoch, dass diese Funktion veraltet und in der Zukunft endgültig entfernt wird.
Also, welche Möglichkeiten bleiben:
Diese Version funktioniert mit PHP 5.3 und höher und ermöglicht Dateinamen SomeSuperClass.php und somesuperclass.php. Wenn Sie 5.3.2 und höher verwenden, wird dieser Autoloader noch schneller arbeiten.
<?php
if (function_exists ('stream_resolve_include_path') == false) {
function stream_resolve_include_path ($filename) {
$paths = explode (PATH_SEPARATOR, get_include_path());
foreach ($paths as $path) {
$path = realpath ($path . PATH_SEPARATOR . $filename);
if ($path) {
return $path;
}
}
return false;
}
}
spl_autoload_register (function ($className, $fileExtensions = null) {
$className = str_replace ('_', '/', $className);
$className = str_replace ('\\', '/', $className);
$file = stream_resolve_include_path ($className . '.php');
if ($file === false) {
$file = stream_resolve_include_path (strtolower ($className . '.php'));
}
if ($file !== false) {
include $file;
return true;
}
return false;
});
Danke, Ich habe nicht bemerkt, dass ich "... as" benutzen muss. –
Keine Sorgen David. Siehe auch die Bearbeitung für eine Klarstellung. – tanerkuc
Sie müssen nicht 'AS' verwenden. Das ist nicht, warum diese Lösung funktioniert Genauso gut könnte man: 'Person benutzen \ Barnes \ David \ Class1; '(was äquivalent zu' user \ Barnes \ David \ Class1 als Class1; ') ist. – cartbeforehorse