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

PHP 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.