Callbacks und Hooks sind beliebte Methoden in PHP, verschiedene Funktionen untereinander kommunizieren zu lassen, ohne die Ausführung des Skripts zu beeinträchtigen. Sie dienen insbesondere der Funktionserweiterung. So nutzen beispielsweise Systeme wie WordPress und Drupal Callbacks und Hooks, um Plugins und Module sauber zu implementieren. Bedeutung des Callback Der Callback dient der Übergabe eines oder mehrerer Parameter an eine aufgerufene Funktion. Diese Parameter werden über den Callback, zu deutsch "Rückruf", direkt übergeben oder von einer anderen Stelle des Skripts abgerufen, ohne dass die aktuell arbeitende Funktion dabei unterbrochen wird. Beim Callback wird grob zwischen einfachen Funktionsnamen, Klassenmethoden und statischen Klassenmethoden unterschieden. In allen drei Fällen leitest du die Rückrufaktion mit call_user_func ein. Die aufgerufene Funktion startet aufgrund dieses Befehls den Abruf der übergebenen Parameter. Es handelt sich hierbei um einen asynchronen Vorgang, denn die Funktion arbeitet weiter, bis sie die geforderten Werte erhalten hat und diese ausgibt oder sie weiter verarbeitet. Im Vergleich dazu würde die Funktion bei einem synchronen Vorgang unterbrochen, bis die geforderten Werte verfügbar sind. Einfacher Funktionsname und Klassenmethode Es handelt sich also beim Callback um eine eigenständige Funktion, mit der du einer anderen Funktion einen Befehl erteilst. Mit diesem Befehl sind der Funktionsname und die Parameter als Argumente oder Arrays anzugeben, die abgerufen werden sollen. Hier ein kleines Beispiel für einen Callback mit einfachem Funktionsnamen: [php] // Callback mit einfachem Funktionsnamen function mein_erster_callback() { echo 'Deine erste Callback-Funktion'; } call_user_func('mein_erster_callback'); [/php] In obigem Beispiel ist "mein_erster_callback" der Funktionsname. Der übergebene Parameter lautet "Deine erste Callback-Funktion" und wird mit call_user_func als solcher ausgegeben. Ähnlich verhält es sich mit der Klassenmethode: [php] //Ein Callback nach der Klassenmethode class Beispielklasse { function MeinZweiterCallback () { echo 'Deine zweite Callback-Funktion': } } [/php] Statt der Funktion wird hier die Klasse angesprochen. Bei der statischen Klassenmethode können zusätzlich Objekte integriert werden. Callback-Funktionen mit array_map Natürlich kannst du mit einem Callback auch kompliziertere Aktionen ausführen. Ein Beispiel dazu ist array_map, was die Callback-Funtion auf verschiedene Elemente anwendet. Mit arr1 werden die Elemente definiert, die von array_map() abgerufen und verarbeitet werden sollen. Über arr2, arr3, usw. kannst du weitere Elementegruppen definieren. Eine einfache Callback-Funktion mit array_map, in welchem die einzelnen Elemente mit sich selbst multipliziert werden: [php] function multiplizieren($n) { return($n * $n +$n); } $a = arr1(1, 3, 5, 6, 12); $b = array_map('multiplizieren', $a); print_r($b); [/php] Die Ausgabe lautet 1, 9, 25, 36, 144. Analog können beispielsweise in Communities beliebige Benutzerdetails oder andere Datenbank-Elemente mit einem Callback abgerufen und gelistet oder weiterverarbeitet werden. Bedeutung des Hook Ein Hook macht in etwa dasselbe wie der Callback. Du kannst ihn anwenden, um Programmcode in eine Anwendung zu integrieren. Er fungiert quasi als Schnittstelle. Der Sinn dahinter ist die Erweiterung einer Anwendung zu bestimmten Ereignissen oder Zeitpunkten. Über einen Hook kannst du also fremden Code abrufen und in der eigenen Anwendung damit arbeiten. Es gibt Software, die genau darauf ausgerichtet ist und mit sogenannten Events arbeitet. Dies ist zum Beispiel bei Shopsystemen hilfreich. Es werden extern verschiedene Events definiert, die nach einer Registrierung an die eigene Funktion übermittelt werden. Dieser Übermittlung dient intern der Hook.