Autoloading Classes

Muitos desenvolvedores 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 autoloaders, permitindo que classes e interfaces sejam automaticamente carregadas se elas não ainda não foram definidas. Ao registrar autoloaders, o PHP têm uma última chance de carregar classes e interfaces antes que falhem com um erro.

Qualquer construto tipo classe pode ser automaticamente carregado do mesmo jeito. Isso inclui classes, interfaces, traits, and enumerações.

Caution

Antes do PHP 8.0.0. era possível usar __autoload() para fazer autoload 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.

Note:

spl_autoload_register() pode ser chamada várias vezes para registrar múltiplos autoloaders. No entando, lançar uma exceção em uma função de autoload interromperá esse processo e não permitirá que outras funções de autoload sejam executadas. Por esse motivo, o lançamento de exceções em funções de autoload é altamente desencorajado.

Example #1 Exemplo de Autoload

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();
?>

Example #2 Outro exemplo de Autoload

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 ...
*/
?>