spl_autoload_register

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

spl_autoload_registerRegistra a função dada como implementação __autoload()

Descrição

spl_autoload_register(?callable $callback = null, bool $throw = true, bool $prepend = false): bool

Registrar uma função na fila de __autoload fornecida pelo spl. Se a fila ainda não estiver ativada, será ativada.

Se seu código tiver uma função __autoload() existente, então esta função deve ser registrada explicitamente na fila __autoload. Isso ocorre porque spl_autoload_register() substituirá efetivamente o cache do mecanismo para a função __autoload() por spl_autoload() ou spl_autoload_call().

Se houver várias funções de carregamento automático, spl_autoload_register() permite isso. Ele cria efetivamente uma fila de funções de carregamento automático e executa cada uma delas na ordem em que são definidas. Em contraste, __autoload() só pode ser definido uma vez.

Parâmetros

callback

A função de carregamento automático sendo registrada. Se for null, então a implementação padrão de spl_autoload() será registrada.

callback(string $class): void

A class não conterá a barra invertida inicial de um identificador totalmente qualificado.

throw

Este parâmetro especifica se spl_autoload_register() deve lançar exceções quando o callback não pode ser registrado.

Warning

Este parâmetro é ignorado a partir do PHP 8.0.0, e um aviso será emitido se definido como false. spl_autoload_register() agora sempre lançará um TypeError em argumentos inválidos.

prepend

Se true, spl_autoload_register() irá adicionar o carregador automático na fila de carregamento automático antes de anexá-lo.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Registro de Alterações

Versão Descrição
8.0.0 callback é anulável agora.

Exemplos

Example #1 spl_autoload_register() como substituição para um __autoload() function

<?php

// function __autoload($class) {
//     include 'classes/' . $class . '.class.php';
// }

function my_autoloader($class) {
    include 'classes/' . $class . '.class.php';
}

spl_autoload_register('my_autoloader');

// Ou, usando uma função anônima
spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.class.php';
});

?>

Example #2 spl_autoload_register() exemplo onde a classe não é carregada

<?php

namespace Foobar;

class Foo {
    static public function test($class) {
        print '[['. $class .']]';
    }
}

spl_autoload_register(__NAMESPACE__ .'\Foo::test');

new InexistentClass;

?>

O exemplo acima produzirá algo semelhante a:

[[Foobar\InexistentClass]]
Fatal error: Class 'Foobar\InexistentClass' not found in ...

Example #3 O identificador será fornecido sem a barra invertida inicial

<?php

spl_autoload_register(static function ($class) {
    var_dump($class);
});

class_exists('RelativeName');
class_exists('RelativeName\\WithNamespace');
class_exists('\\AbsoluteName');
class_exists('\\AbsoluteName\\WithNamespace');

?>

O exemplo acima produzirá:

string(12) "RelativeName"
string(26) "RelativeName\WithNamespace"
string(12) "AbsoluteName"
string(26) "AbsoluteName\WithNamespace"

Veja Também