W3docs

Capire le funzioni callback in PHP

Le funzioni callback in PHP consentono di passare una funzione come argomento a un'altra funzione. Scopri come usarle con esempi pratici.

Un callback (o "callable") è una funzione che si passa a un'altra funzione in modo che possa essere chiamata in un secondo momento. I callback sono la base delle funzioni di ordine superiore in PHP — array_map, usort, array_filter e molti hook dei framework si aspettano che tu fornisca un callback. Questo capitolo spiega cosa si intende per callable in PHP, le quattro modalità per scriverne uno e come utilizzarli nel codice quotidiano.

Questa pagina presuppone che tu abbia già una conoscenza di base delle funzioni PHP. Se sei nuovo alla definizione di funzioni, leggila prima.

Cosa sono le funzioni callback in PHP?

Una funzione callback PHP è qualsiasi funzione che viene passata come argomento a un'altra funzione e poi invocata al suo interno. PHP riconosce un valore come callable in quattro forme:

  • Una stringa con il nome della funzione'strtoupper' fa riferimento alla funzione built-in strtoupper().
  • Una funzione anonima (closure)function () { ... } assegnata a una variabile o passata inline.
  • Una arrow functionfn() => ..., una sintassi abbreviata per closure brevi (PHP 7.4+).
  • Un riferimento a oggetto/metodo[$object, 'methodName'] o ['ClassName', 'staticMethod'].

Il type hint per un parametro che accetta uno qualsiasi di questi è callable. Puoi invocare il valore direttamente ($callback()) oppure con call_user_func() / call_user_func_array() quando devi inoltrare un elenco dinamico di argomenti.

Perché usare le funzioni callback in PHP?

I callback ti permettono di scrivere una funzione una sola volta e di personalizzarne il comportamento nel punto in cui viene chiamata, senza riscriverla:

  • Riusabilità. Una funzione generica (ad esempio "scorri questo elenco e fai qualcosa con ogni elemento") funziona per qualsiasi compito fornito come callback.
  • Logica più pulita. Le funzioni di ordine superiore built-in come array_map e array_filter sostituiscono i cicli manuali con una singola riga dichiarativa.
  • Disaccoppiamento. Il codice event-driven — gestori di form, processori di comandi CLI, hook dei framework — registra un callback che viene eseguito solo quando si verifica l'evento, mantenendo separati il trigger e il gestore.

Come usare le funzioni callback in PHP

Usare le funzioni callback in PHP è semplice. Basta passare il nome della funzione o la funzione anonima come argomento alla funzione padre. Ecco un esempio di come usare una funzione con nome come callback:

Esempio PHP: usare una funzione con nome come callback

php— editable, runs on the server

Nell'esempio precedente, myCallbackFunction viene passata come argomento a parentFunction. Quando parentFunction viene eseguita, chiama call_user_func passando myCallbackFunction come argomento. Di conseguenza, myCallbackFunction viene eseguita e stampa il messaggio "The callback function has been executed."

Ecco un esempio di come usare una funzione anonima come callback:

Esempio PHP: usare una funzione anonima come callback

php— editable, runs on the server

In questo esempio, la funzione anonima viene assegnata alla variabile $myCallbackFunction. Questa variabile può poi essere passata come argomento a parentFunction, proprio come la funzione con nome nell'esempio precedente.

A partire da PHP 7.4, puoi anche utilizzare la sintassi concisa delle arrow function (fn) per callback semplici. Le arrow function catturano automaticamente le variabili dall'ambito padre e offrono una sintassi più pulita per callback brevi:

$myCallback = fn() => print("The arrow callback function has been executed.");
parentFunction($myCallback);

Passare argomenti a un callback

La maggior parte dei callback utili riceve dati. La funzione padre decide quali argomenti passare quando invoca il callback. Usa call_user_func() per passarli in modo posizionale, o call_user_func_array() per inoltrare un array di argomenti:

<?php

function applyToPair(callable $callback, int $a, int $b) {
  return call_user_func($callback, $a, $b);
}

$add      = fn(int $x, int $y) => $x + $y;
$multiply = fn(int $x, int $y) => $x * $y;

echo applyToPair($add, 4, 6);      // 10
echo "\n";
echo applyToPair($multiply, 4, 6); // 24

Qui applyToPair non sa se sta eseguendo un'addizione o una moltiplicazione — quella decisione risiede nel callback che passi.

Usare i callback con le funzioni built-in

Il posto più comune in cui userai i callback sono le funzioni array di PHP. Prendono un callback e lo applicano a tutti gli elementi di un elenco, sostituendo i cicli scritti manualmente.

<?php

$numbers = [1, 2, 3, 4, 5];

// array_map: transform every element
$squares = array_map(fn($n) => $n * $n, $numbers);
echo implode(', ', $squares);   // 1, 4, 9, 16, 25
echo "\n";

// array_filter: keep elements where the callback returns true
$evens = array_filter($numbers, fn($n) => $n % 2 === 0);
echo implode(', ', $evens);     // 2, 4
echo "\n";

// usort: sort using a comparison callback (descending order)
$values = [3, 1, 4, 1, 5];
usort($values, fn($a, $b) => $b <=> $a);
echo implode(', ', $values);    // 5, 4, 3, 1, 1

Per maggiori informazioni sull'ordinamento, consulta Ordinare gli array in PHP.

Usare i metodi degli oggetti come callback

Un callback può anche puntare a un metodo. Passa [$object, 'methodName'] per un metodo di istanza, oppure ['ClassName', 'staticMethod'] per uno statico:

<?php

class Greeter {
  public function greet(string $name): string {
    return "Hello, {$name}!";
  }

  public static function shout(string $name): string {
    return strtoupper("Hi {$name}");
  }
}

$greeter = new Greeter();

// Instance method as a callback
echo call_user_func([$greeter, 'greet'], 'Ada');   // Hello, Ada!
echo "\n";

// Static method as a callback
echo call_user_func(['Greeter', 'shout'], 'Ada');  // HI ADA

Suggerimento: A partire da PHP 8.1 puoi usare la sintassi first-class callable$greeter->greet(...) o strtoupper(...) — per ottenere una Closure da qualsiasi callable senza racchiudere stringhe tra virgolette, risultando più sicura e compatibile con gli IDE.

Conclusione

In conclusione, le funzioni callback PHP sono uno strumento potente per la programmazione in PHP. Consentono il riuso del codice, semplificano il codice complesso e abilitano la programmazione event-driven lato server. Comprendendo come usare le funzioni callback PHP, puoi portare le tue competenze PHP a un livello superiore.

Pratica

Pratica
Cosa sono le funzioni callback in PHP?
Cosa sono le funzioni callback in PHP?
Was this page helpful?