Tenho certeza de que há uma explicação muito fácil para isso. Qual é a diferença entre isso:
function barber($type){
echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom");
call_user_func('barber', "shave");
... e isto (e quais são os benefícios?):
function barber($type){
echo "You wanted a $type haircut, no problem\n";
}
barber('mushroom');
barber('shave');
call_user_func
não é necessariamente necessário. Você sempre pode chamar uma função usando funções variáveis:$some_func()
.call_user_func_array
é aquele que é realmente útil.$func = function(){};
. Qualquer parâmetro possível para call_user_func deve ser chamável, o que significa que contém dados suficientes para acessá-lo diretamente, seja isso$func()
, ou$obj->{$func}()
, ou o que quer.Embora você possa chamar nomes de funções variáveis desta maneira:
há casos em que você não sabe quantos argumentos está passando. Considere o seguinte:
Também é útil para chamar métodos estáticos e de objeto, respectivamente:
fonte
a
call_user_func
opção está lá para que você possa fazer coisas como:onde a
dynamicFunctionName
string poderia ser mais excitante e gerada em tempo de execução. Você não deve usar call_user_func a menos que seja necessário, porque é mais lento.fonte
Eu imagino que seja útil para chamar uma função cujo nome você não sabe com antecedência ... Algo como:
fonte
$func('stuff');
call_user_func()
neste cenário.Com o PHP 7 você pode usar a sintaxe de função variável mais agradável em qualquer lugar. Ele funciona com funções estáticas / de instância e pode receber uma série de parâmetros. Mais informações em https://trowski.com/2015/06/20/php-callable-paradox
fonte
Não há vantagens em chamar a função assim porque acho que costumava chamar a função "usuário" (como o plugin) porque editar o arquivo principal não é uma boa opção. aqui estão os exemplos sujos usados pelo Wordpress
...
....
resultado
fonte
em seu primeiro exemplo, você está usando o nome da função, que é uma string. pode vir de fora ou ser determinado imediatamente. ou seja, você não sabe qual função precisará ser executada no momento da criação do código.
fonte
Ao usar namespaces, call_user_func () é a única maneira de executar uma função cujo nome você não sabe de antemão, por exemplo:
Se todas as suas funções estivessem no mesmo namespace, então não seria um problema, pois você poderia usar algo assim:
Edit: Após @Jannis dizendo que estou errado, fiz mais alguns testes e não tive muita sorte:
Você pode ver os resultados de saída aqui: https://3v4l.org/iBERh parece que o segundo método funciona para o PHP 7 em diante, mas não para o PHP 5.6.
fonte