Muitos programadores, ao desenvolver aplicações orientadas a objeto, criam um arquivo PHP para cada definição de classe. Um dos maiores contratempos é ter de escrever uma longa lista de "includes" no início de cada script (um para cada classe).
A função spl_autoload_register() registra qualquer número de autocarregadores, permitindo que classes e interfaces sejam automaticamente carregadas se elas não ainda não tiverem sido definidas. Ao registrar autocarregadores, o PHP tem uma última chance de carregar classes e interfaces antes que falhem com um erro.
Qualquer construção semelhante a uma classe pode ser carregada automaticamente da mesma maneira. Isso inclui classes, interfaces, traits e enumerações.
Antes do PHP 8.0.0, era possível usar __autoload() para fazer autocarregamento de classes and interfaces. No entanto, ela é uma alternativa menos flexível a spl_autoload_register() e __autoload() está descontinuada a partir do PHP 7.2.0, e removida a partir do PHP 8.0.0.
Nota:
spl_autoload_register() pode ser chamada várias vezes para registrar múltiplos autocarregadores. No entando, lançar uma exceção em uma função de autocarregamento interromperá esse processo e não permitirá que outras funções de autocarregamento sejam executadas. Por esse motivo, o lançamento de exceções em funções de autocarregamento é altamente desencorajado.
Exemplo #1 Exemplo de autocarregamento
Esse exemplo tenta carregar as classes MyClass1
e MyClass2
dos arquivos MyClass1.php
e MyClass2.php, respectivamente.
<?php
spl_autoload_register(function ($class_name) {
include $class_name . '.php';
});
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
Exemplo #2 Outro exemplo de autocarregamento
Este exemplo tenta carregar a interface ITest
.
<?php
spl_autoload_register(function ($name) {
var_dump($name);
});
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>
Exemplo #3 Usando o autocarregador do Composer
» Composer gera um vendor/autoload.php
que é configurado para carregar automaticamente pacotes gerenciados
pelo Composer. Ao incluir este arquivo, esses pacotes podem ser usados sem
nenhum trabalho adicional.
<?php
require __DIR__ . '/vendor/autoload.php';
$uuid = new Ramsey\Uuid\Uuid::uuid7();
echo "Gerado novo UUID -> ", $uuid->toString(), "\n";
?>