W3docs

PHP Callback-Funktionen verstehen

PHP Callback-Funktionen ermöglichen es, eine Funktion als Argument an eine andere zu übergeben. Lernen Sie die vier Formen und typische Anwendungsfälle kennen.

Ein Callback (oder „Callable") ist eine Funktion, die Sie an eine andere Funktion übergeben, damit sie später aufgerufen werden kann. Callbacks bilden die Grundlage der Higher-Order-Funktionen in PHP — array_map, usort, array_filter und viele Framework-Hooks erwarten alle, dass Sie ihnen einen Callback übergeben. Dieses Kapitel erklärt, was in PHP als Callable gilt, die vier Möglichkeiten, einen Callback zu schreiben, und wie Sie diese im alltäglichen Code einsetzen.

Diese Seite setzt voraus, dass Sie bereits grundlegende PHP-Funktionen kennen. Wenn Sie neu im Definieren von Funktionen sind, lesen Sie diese zuerst.

Was sind PHP Callback-Funktionen?

Eine PHP Callback-Funktion ist jede Funktion, die als Argument an eine andere Funktion übergeben und von dort aus aufgerufen wird. PHP erkennt einen Wert in vier Formen als callable:

  • Ein Funktionsname als String'strtoupper' verweist auf die eingebaute Funktion strtoupper().
  • Eine anonyme Funktion (Closure)function () { ... }, einer Variable zugewiesen oder direkt übergeben.
  • Eine Pfeilfunktionfn() => ..., eine Kurzschreibweise für kurze Closures (ab PHP 7.4).
  • Eine Objekt-/Methoden-Referenz[$object, 'methodName'] oder ['ClassName', 'staticMethod'].

Der Typ-Hinweis für einen Parameter, der einen dieser Typen akzeptiert, ist callable. Sie können den Wert direkt aufrufen ($callback()) oder mit call_user_func() / call_user_func_array(), wenn Sie eine dynamische Liste von Argumenten weitergeben möchten.

Warum PHP Callback-Funktionen verwenden?

Callbacks ermöglichen es Ihnen, eine Funktion einmal zu schreiben und ihr Verhalten an der Aufrufstelle anzupassen, ohne sie neu zu schreiben:

  • Wiederverwendbarkeit. Eine generische Funktion (z. B. „Iteriere über diese Liste und tue etwas mit jedem Element") funktioniert für jede Aufgabe, die Sie als Callback übergeben.
  • Klarere Logik. Eingebaute Higher-Order-Funktionen wie array_map und array_filter ersetzen manuelle Schleifen durch eine einzige, deklarative Zeile.
  • Entkopplung. Ereignisgesteuerter Code — Formular-Handler, CLI-Befehlsprozessoren, Framework-Hooks — registriert einen Callback, der nur dann ausgeführt wird, wenn das Ereignis eintritt, und hält Auslöser und Handler getrennt.

Wie man PHP Callback-Funktionen verwendet

Die Verwendung von PHP Callback-Funktionen ist unkompliziert. Sie übergeben einfach den Namen der Funktion oder die anonyme Funktion als Argument an die übergeordnete Funktion. Hier ist ein Beispiel, wie eine benannte Funktion als Callback verwendet wird:

PHP-Beispiel: Benannte Funktion als Callback

php— editable, runs on the server

Im obigen Beispiel wird myCallbackFunction als Argument an parentFunction übergeben. Wenn parentFunction ausgeführt wird, ruft sie call_user_func auf und übergibt myCallbackFunction als Argument. Als Ergebnis wird myCallbackFunction ausgeführt und gibt die Meldung "The callback function has been executed." aus.

Hier ist ein Beispiel, wie eine anonyme Funktion als Callback verwendet wird:

PHP-Beispiel: Anonyme Funktion als Callback

php— editable, runs on the server

In diesem Beispiel wird die anonyme Funktion der Variable $myCallbackFunction zugewiesen. Diese Variable kann dann als Argument an parentFunction übergeben werden, genau wie die benannte Funktion im vorherigen Beispiel.

Ab PHP 7.4 können Sie auch die prägnante Pfeilfunktions-Syntax (fn) für einfache Callbacks verwenden. Pfeilfunktionen erfassen automatisch Variablen aus dem übergeordneten Gültigkeitsbereich und bieten eine klarere Syntax für kurze Callbacks:

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

Argumente an einen Callback übergeben

Die nützlichsten Callbacks empfangen Daten. Die übergeordnete Funktion entscheidet, welche Argumente beim Aufruf des Callbacks übergeben werden. Verwenden Sie call_user_func(), um sie positionell zu übergeben, oder call_user_func_array(), um ein Array von Argumenten weiterzuleiten:

<?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

Hier weiß applyToPair nicht, ob es addiert oder multipliziert — diese Entscheidung liegt im Callback, den Sie übergeben.

Callbacks mit eingebauten Funktionen verwenden

Der häufigste Einsatzort für Callbacks sind PHPs Array-Funktionen. Sie nehmen einen Callback entgegen und wenden ihn auf eine Liste an, wodurch handgeschriebene Schleifen ersetzt werden.

<?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

Weitere Informationen zum Sortieren finden Sie unter Arrays in PHP sortieren.

Objektmethoden als Callbacks verwenden

Ein Callback kann auch auf eine Methode verweisen. Übergeben Sie [$object, 'methodName'] für eine Instanzmethode oder ['ClassName', 'staticMethod'] für eine statische Methode:

<?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

Tipp: Ab PHP 8.1 können Sie die First-Class-Callable-Syntax verwenden — $greeter->greet(...) oder strtoupper(...) —, um eine Closure aus jedem Callable zu erhalten, ohne Strings zu zitieren, was sicherer und IDE-freundlicher ist.

Fazit

Zusammenfassend lässt sich sagen, dass PHP Callback-Funktionen ein leistungsstarkes Werkzeug für die PHP-Programmierung sind. Sie ermöglichen Wiederverwendbarkeit von Code, vereinfachen komplexen Code und ermöglichen serverseitiges ereignisgesteuertes Programmieren. Wenn Sie verstehen, wie PHP Callback-Funktionen eingesetzt werden, können Sie Ihre PHP-Kenntnisse auf die nächste Ebene heben.

Übungen

Übung
Was sind PHP Callback-Funktionen?
Was sind PHP Callback-Funktionen?
Was this page helpful?