Używanie ma problem, chociaż jest to zdecydowanie najszybsza metoda, oczekuje również, że wszystkie nazwy plików będą pisane małymi literami.
spl_autoload_extensions(".php");
spl_autoload_register();
Na przykład:
Plik zawierający klasę SomeSuperClass musiałby nazywać się somesuperclass.php, jest to problem w przypadku korzystania z systemu plików z rozróżnianiem wielkości liter, takiego jak Linux, jeśli plik nosi nazwę SomeSuperClass.php, ale nie jest to problem w systemie Windows.
Używanie __autoload w kodzie może nadal działać z aktualnymi wersjami PHP, ale spodziewaj się, że ta funkcja zostanie wycofana i ostatecznie usunięta w przyszłości.
Więc jakie opcje zostały:
Ta wersja będzie działać z PHP 5.3 i nowszymi wersjami i pozwala na używanie nazw plików SomeSuperClass.php i somesuperclass.php. Jeśli używasz wersji 5.3.2 i nowszych, ten autoloader będzie działał jeszcze szybciej.
<?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;
});
AS
. Nie dlatego to rozwiązanie działa. Możesz równie łatwo zrobić:use Person\Barnes\David\Class1;
(co jest równoważneuse Person\Barnes\David\Class1 as Class1;
).