Fiquei muito animado ao ler sobre funções anônimas em php, que permitem declarar uma variável que é função mais fácil do que você faria com create_function . Agora estou me perguntando se tenho uma função que é passada uma variável, como posso verificá-la para determinar se é uma função? Não há função is_function () ainda, e quando eu faço um var_dump de uma variável que é uma função ::
$func = function(){
echo 'asdf';
};
var_dump($func);
Eu entendi isso:
object(Closure)#8 (0) { }
Alguma ideia de como verificar se esta é uma função?
php
anonymous-function
Jage
fonte
fonte
Você pode usar
function_exists
para verificar se há uma função com o nome fornecido. E para combinar isso com funções anônimas, tente o seguinte:fonte
is_object()
einstanceof Closure
é uma maneira muito mais robusta de verificar isso!Se você deseja apenas verificar se uma variável é uma função anônima e não uma string ou array chamável, use
instanceof
.Funções anônimas (do tipo que foram adicionadas no PHP 5.3) são sempre instâncias da
Closure
classe, e cada instância daClosure
classe é uma função anônima.Existe outro tipo de coisa em PHP que pode ser considerada uma função, e são os objetos que implementam o
__invoke
método mágico. Se quiser incluí-los (enquanto exclui strings e matrizes), usemethod_exists($func, '__invoke')
. Isso ainda incluirá fechamentos, uma vez que os fechamentos implementam__invoke
para consistência.fonte
is_callable()
tentará encontrar um método para chamar com base em uma string ou array passado, que pode carregar classes automaticamente e pode não ser o comportamento que você espera / requer.fonte
Em php, os callables válidos podem ser funções, nome de funções (strings) e arrays dos formulários
['className', 'staticMethod']
ou[$object, 'method']
, para detectar apenas funções, é necessário excluir strings e arrays:fonte