Callback nelle funzioni integrate in PHP
In PHP esiste una serie di funzioni integrate
che accettano callback come parametro.
Studieremo il principio generale di funzionamento
usando come esempio la funzione array_map.
Questa funzione accetta come primo parametro
un callback, e come secondo - un array. La funzione applica
il callback a ogni elemento dell'array
e restituisce l'array modificato.
Diamo un'occhiata alle opzioni di utilizzo di questa funzione tenendo conto delle conoscenze acquisite in precedenza.
Opzione 1
Estraiamo la radice quadrata da ogni elemento dell'array
usando la funzione integrata
sqrt.
Per fare questo, passeremo come parametro callback
una stringa con il nome di questa funzione:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Opzione 2
Eleviamo al quadrato ogni elemento dell'array usando una funzione normale creata da noi. Per fare questo, passeremo come parametro callback una stringa con il nome di questa funzione:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Opzione 3
Convertiamo la nostra funzione in una funzione anonima, assegnata a una variabile:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Opzione 4
Passiamo la funzione anonima direttamente come parametro:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Opzione 5
Usiamo una funzione arrow:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Opzione 6
Supponiamo ora che l'esponente, a cui
deve essere elevato il numero, sia definito da una variabile esterna
al callback. Usiamo questa variabile,
accedendovi tramite use:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
Opzione 7
Riscriviamo il codice precedente usando una funzione arrow.
Ora la variabile $pow
sarà disponibile automaticamente:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Compiti pratici
Dato un array di stringhe. Converti il testo di ogni elemento dell'array in maiuscolo.
Dato un array di stringhe. Inverti il testo di ogni elemento dell'array in modo che i caratteri siano in ordine inverso.