spl_autoload_register()
permite registrar várias funções (ou métodos estáticos de sua própria classe Autoload) que o PHP colocará em uma pilha / fila e chamará sequencialmente quando uma "nova classe" for declarada.
Então, por exemplo:
spl_autoload_register('myAutoloader');
function myAutoloader($className)
{
$path = '/path/to/class/';
include $path.$className.'.php';
}
//-------------------------------------
$myClass = new MyClass();
No exemplo acima, "MyClass" é o nome da classe que você está tentando instanciar, o PHP passa esse nome como uma string para spl_autoload_register()
, o que permite pegar a variável e usá-la para "incluir" a classe / arquivo apropriado . Como resultado, você não precisa especificamente incluir essa classe por meio de uma instrução include / require ...
Simplesmente chame a classe que você deseja instanciar, como no exemplo acima, e como você registrou uma função (via spl_autoload_register()
) própria que descobrirá onde toda a sua classe está localizada, o PHP usará essa função.
A vantagem de usar spl_autoload_register()
é que, diferentemente de __autoload()
você não precisar implementar uma função de carregamento automático em todos os arquivos que você cria. spl_autoload_register()
também permite registrar várias funções de carregamento automático para acelerar o carregamento automático e torná-lo ainda mais fácil.
Exemplo:
spl_autoload_register('MyAutoloader::ClassLoader');
spl_autoload_register('MyAutoloader::LibraryLoader');
spl_autoload_register('MyAutoloader::HelperLoader');
spl_autoload_register('MyAutoloader::DatabaseLoader');
class MyAutoloader
{
public static function ClassLoader($className)
{
//your loading logic here
}
public static function LibraryLoader($className)
{
//your loading logic here
}
Com relação a spl_autoload , o manual declara:
Esta função deve ser usada como uma implementação padrão para __autoload()
. Se nada mais for especificado e spl_autoload_register()
for chamado sem nenhum parâmetro, essas funções serão usadas para qualquer chamada posterior a __autoload()
.
Em termos mais práticos, se todos os seus arquivos estiverem localizados em um único diretório e seu aplicativo usar não apenas arquivos .php, mas arquivos de configuração personalizados com extensões .inc, por exemplo, uma estratégia que você poderia usar seria adicionar seu diretório contendo todos os arquivos para o caminho de inclusão do PHP (via set_include_path()
).
E como você também requer seus arquivos de configuração, você usaria spl_autoload_extensions()
para listar as extensões que deseja que o PHP procure.
Exemplo:
set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();
Como spl_autoload é a implementação padrão do __autoload()
método mágico, o PHP chamará spl_autoload quando você tentar instanciar uma nova classe.
Espero que isto ajude...