Callbacks en funciones integradas en PHP
En PHP hay una serie de funciones integradas
que aceptan callbacks como parámetro.
Estudiaremos el principio general de trabajo con ellas
usando como ejemplo la función array_map.
Esta función acepta como primer parámetro un
callback, y como segundo - un array. La función aplica
el callback a cada elemento del array
y devuelve el array modificado.
Veamos las opciones de uso de esta función teniendo en cuenta los conocimientos adquiridos previamente.
Opción 1
Extraigamos la raíz cuadrada de cada elemento del array
usando la función integrada
sqrt.
Para ello, pasaremos como parámetro callback
una cadena con el nombre de esta función:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Opción 2
Elevemos cada elemento del array al cuadrado usando una función ordinaria creada por nosotros. Para ello, pasaremos como parámetro callback una cadena con el nombre de esta función:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Opción 3
Transformemos nuestra función en una anónima, almacenada en una variable:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Opción 4
Pasemos la función anónima como parámetro:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Opción 5
Usemos una función flecha:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Opción 6
Supongamos ahora que la potencia a la que necesita
elevarse el número, se define por una variable externa
al callback. Usemos esta variable,
obteniendo acceso a ella a través de use:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
Opción 7
Reescribamos el código anterior usando una función
flecha. Ahora la variable $pow
estará disponible automáticamente:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Tareas prácticas
Dado un array con cadenas de texto. Convierta el texto de cada elemento del array a mayúsculas.
Dado un array con cadenas de texto. Invierta el texto de cada elemento del array de modo que los caracteres vayan en orden inverso.