Inicio > PHP > Pasar una funcion como parámetro de otra función en php

PASAR UNA FUNCION COMO PARÁMETRO DE OTRA FUNCIÓN EN PHP

13/06/2020PHP ME GUSTA

 

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);



En este primer ejemplo se puede ver que se crean las funciones anónimas suma y resta que tienen dos parámetros. Lo que también permite php es crear una función y pasar como argumento el nombre de dicha función.



function multiplicacion($a,$b){

return $a * $b;

}

function operacion($function,$a,$b){
  echo $function($a,$b);
}

operacion('multiplicacion',5,3);



En este segundo ejemplo se puede ver que se crea la función multiplicacioon y que se usa la funcion operacion como en el primer ejemplo.

Pero ¿cómo se comprueba que un literal es el nombre de una funcióm 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.


Para el caso de las funciones anónimas no se puede usar la comprobación function_exists que en el caso de la función multiplicacion devolvería true.
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).'
'; }


Espero que os haya gustado este post y que lo veáis útil.


 


Comentarios

No hay comentarios en este artículo.