Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Função load

Queria saber porque na linha :

spl_autoload_register(__NAMESPACE__ . "\load");

eu não uso load() e sim apenas load...

7 respostas

Se for ver a documentação em https://www.php.net/manual/en/function.spl-autoload-register.php

Esse primeiro argumento é um callable, que internamente é chamado pelo método call_user_func

https://www.php.net/manual/en/language.types.callable.php

Fiquei curioso com sua pergunta, fiquei satisfeito com o que encontrei na documentação.

Espero ter ajudado

Desculpe mais acho que não foi isso que perguntei.

queria saber porque depois do callback a função concatena com load e não com load().

Olá Anderson,

É como o Igor falou mesmo, para passar um callback você não precisa incluir os parênteses, um jeito de entender seria imaginar que chamando load() você está executando a função, e utilizando apenas 'load' você está passando a função como parâmetro sem executar.

Essa é uma regra do PHP, simplesmente decidiram que ao passar uma função como callback, você não utiliza os parênteses.

Ok e porque no exemplo se usou \load? Eu tirei a barra e tive o mesmo efeito.

Nesse caso é apenas para juntar com o __NAMESPACE__, já que para indicar um namespace fazemos: namespace\classe ou namespace\funcao

Toda a parte de __NAMESPACE__ mais a barra \ estão aí apenas por garantia, para garantir que caso esse arquivo esteja dentro de um namespace continue a funcionar normal.

Do mesmo jeito que classes fazem parte de um namespace, também é possível com as funções. Então a constante __NAMESPACE__ vai retornar o namespace atual para garantir que estamos passando a função load correta.

Como o arquivo não está em nenhum namespace definido, o resultado vai ser apenas \load, a barra sem nada antes indica o namespace geral.

Talvez fazer alguns testes com esse exemplo possa ajudar:

<?php

// Agora estamos dentro de um namespace
namespace Autoload;

function load()
{
    echo "Autoloading...";
}

// Funciona
// load();

// Funciona
// call_user_func(__NAMESPACE__ . '\load');

// Não funciona
// call_user_func('load');

Um detalhe importante é que estamos utilizando o call_user_func para executar a função, fazemos isso para simular o spl_autoload_register, pois os dois recebem um callback (a função load) e então executam esse callback.

solução!

Obrigado