Tenho me perguntado se é possível ou não passar uma função como parâmetro em PHP; Eu quero algo como quando você está programando em JS:
object.exampleMethod(function(){
// some stuff to execute
});
O que eu quero é executar essa função em algum lugar em exampleMethod. Isso é possível em PHP?
Respostas:
É possível se você estiver usando o PHP 5.3.0 ou superior.
Consulte Funções anônimas no manual.
No seu caso, você definiria
exampleMethod
assim:fonte
create_function
create_function()
. Não é exatamente a mesma coisa, já que você tem que passar sua função como uma string de código, que então éeval()
exibida nos bastidores. Não é o ideal, mas você pode usá-lo.exampleMethod(strpos);
Só para adicionar aos outros, você pode passar um nome de função:
Isso funcionará no PHP4.
fonte
Você também pode usar create_function para criar uma função como uma variável e distribuí -la. Porém, eu gosto mais da sensação de funções anônimas . Go zombat.
fonte
Basta codificar assim:
seria ótimo se você pudesse inventar algo assim (inspirado no Laravel Illuminate):
fonte
PHP VERSION> = 5.3.0
Exemplo 1: básico
Exemplo 2: objeto std
Exemplo 3: chamada de classe não estática
Exemplo 4: chamada de classe estática
fonte
De acordo com a resposta de @ zombat, é melhor validar as Funções Anônimas primeiro:
Ou valide o tipo de argumento desde o PHP 5.4.0:
fonte
Testado para PHP 5.3
Como vejo aqui, a função anônima pode ajudá-lo: http://php.net/manual/en/functions.anonymous.php
Provavelmente, o que você precisará e não foi dito antes é como passar uma função sem envolvê-la em uma função criada instantaneamente . Como você verá mais tarde, você precisará passar o nome da função escrito em uma string como um parâmetro, verificar sua "capacidade de chamada" e chamá-la.
A função para fazer a verificação:
Então, para chamá-lo, use este pedaço de código (se você também precisar de parâmetros, coloque-os em um array), visto em: http://php.net/manual/en/function.call-user-func.php
da seguinte forma (de forma semelhante, sem parâmetros):
Aqui está uma aula que explica como fazer algo semelhante:
e um exemplo de uso
fonte
Exemplo simples usando uma classe:
fonte