Queria saber porque na linha :
spl_autoload_register(__NAMESPACE__ . "\load");
eu não uso load() e sim apenas load...
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Queria saber porque na linha :
spl_autoload_register(__NAMESPACE__ . "\load");
eu não uso load() e sim apenas load...
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.
Obrigado