El uso tiene un problema, aunque es, con mucho, el método más rápido, también espera que todos los nombres de archivo estén en minúsculas.
spl_autoload_extensions(".php");
spl_autoload_register();
Por ejemplo:
Un archivo que contenga la clase SomeSuperClass debería llamarse somesuperclass.php, esto es un problema cuando se usa un sistema de archivos sensible a mayúsculas y minúsculas como Linux, si su archivo se llama SomeSuperClass.php pero no es un problema en Windows.
El uso de __autoload en su código puede seguir funcionando con las versiones actuales de PHP, pero se espera que esta característica quede obsoleta y finalmente se elimine en el futuro.
Entonces, qué opciones quedan:
Esta versión funcionará con PHP 5.3 y superior y permite los nombres de archivo SomeSuperClass.php y somesuperclass.php. Si usa 5.3.2 y superior, este autocargador funcionará aún más rápido.
<?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
. No es por eso que esta solución funciona. También podría hacer:use Person\Barnes\David\Class1;
(que es equivalente ause Person\Barnes\David\Class1 as Class1;
).