Usar tem um problema, embora seja de longe o método mais rápido, ele também espera que todos os seus nomes de arquivo estejam em minúsculas.
spl_autoload_extensions(".php");
spl_autoload_register();
Por exemplo:
Um arquivo contendo a classe SomeSuperClass precisaria ser nomeado somesuperclass.php, isso é um problema quando se usa um sistema de arquivos com distinção entre maiúsculas e minúsculas como o Linux, se seu arquivo se chama SomeSuperClass.php mas não é um problema no Windows.
Usar __autoload em seu código ainda pode funcionar com as versões atuais do PHP, mas espera que esse recurso se torne obsoleto e, finalmente, seja removido no futuro.
Então, quais são as opções restantes:
Esta versão funcionará com PHP 5.3 e superior e permite nomes de arquivo SomeSuperClass.php e somesuperclass.php. Se você estiver usando 5.3.2 e superior, este autoloader funcionará ainda mais 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
. Não é por isso que essa solução funciona. Você poderia facilmente fazer:use Person\Barnes\David\Class1;
(que é equivalente ause Person\Barnes\David\Class1 as Class1;
).