Queria saber porque na linha :
spl_autoload_register(__NAMESPACE__ . "\load");
eu não uso load() e sim apenas load...
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