Me he estado preguntando si es posible o no pasar una función como parámetro en PHP; Quiero algo como cuando estás programando en JS:
object.exampleMethod(function(){
// some stuff to execute
});
Lo que quiero es ejecutar esa función en algún lugar de exampleMethod. ¿Es eso posible en PHP?

Respuestas:
Es posible si está utilizando PHP 5.3.0 o superior.
Consulte Funciones anónimas en el manual.
En su caso, definiría
exampleMethodasí:fuente
create_functioncreate_function(). No es exactamente lo mismo, ya que tienes que pasar tu función como una cadena de código, que luego se poneeval()detrás de escena. No es ideal, pero es posible que pueda usarlo.exampleMethod(strpos);Solo para agregar a los demás, puede pasar un nombre de función:
Esto funcionará en PHP4.
fuente
También puede usar create_function para crear una función como una variable y pasarla. Sin embargo, me gusta más la sensación de funciones anónimas . Vuélvete zombat.
fuente
Solo codifícalo así:
Sería genial si pudieras inventar algo como esto (inspirado en Laravel Illuminate):
fuente
VERSIÓN PHP> = 5.3.0
Ejemplo 1: básico
Ejemplo 2: objeto std
Ejemplo 3: llamada de clase no estática
Ejemplo 4: llamada de clase estática
fuente
De acuerdo con la respuesta de @zombat, es mejor validar primero las funciones anónimas:
O valide el tipo de argumento desde PHP 5.4.0:
fuente
Probado para PHP 5.3
Como veo aquí, la función anónima podría ayudarlo: http://php.net/manual/en/functions.anonymous.php
Lo que probablemente necesitará y no se dijo antes es cómo pasar una función sin envolverla dentro de una función creada sobre la marcha . Como verá más adelante, deberá pasar el nombre de la función escrito en una cadena como parámetro, verificar su "capacidad de llamada" y luego llamarlo.
La función para verificar:
Luego, para llamarlo, use este fragmento de código (si también necesita parámetros, colóquelos en una matriz), que se ve en: http://php.net/manual/en/function.call-user-func.php
como sigue (de una manera similar, sin parámetros):
Aquí hay una clase que explica cómo hacer algo similar:
y un ejemplo de uso
fuente
Ejemplo simple usando una clase:
fuente