Pasar una función como parámetro de otra función en php
Hace un tiempo expliqué en un post como funcionan las funciones anónimas en php y ahora quiero comentaros como pasar una funcion como parámetro de otra función en php y la verdad es que es bastante sencillo.Primero voy a poner un ejemplo usando funciones anónimas:
$suma = function ($a,$b){
return $a + $b;
};
$resta = function ($a,$b){
return $a - $b;
};
function operacion($function,$a,$b){
echo $function($a,$b);
}
operacion($resta,5,3);
operacion($suma,5,3);
function multiplicacion($a,$b){
return $a * $b;
}
function operacion($function,$a,$b){
echo $function($a,$b);
}
operacion('multiplicacion',5,3);
Pero ¿cómo se comprueba que un literal es el nombre de una función o que una variable es una función anónima? Preguntándole a php si es callable usando "is_callable".
Usando los ejemplos anteriores:
var_dump(is_callable($resta)); //Devolvería true
var_dump(is_callable('multiplicacion')); //Devolvería true
var_dump(is_callable('suma')); //Devolvería false pq no existe la función suma sino la variable $suma que es una función anónima.
Gracias a php 7 podemos decirle, a la función "operacion" que el argumento "$function" es una función simplemente indicando que el tipo es "callable"
function operacion(callable $function,$a,$b){
echo $function($a,$b).'
';
}