Signatur
Beschreibung
call_user_func() ermöglicht den dynamischen Aufruf einer Funktion oder Methode, die als callable übergeben wird. Das ist besonders nützlich, wenn der genaue Funktionsname oder die Methode erst zur Laufzeit bekannt ist – etwa beim Einsatz von Hooks, Event-Systemen oder Plugin-Architekturen.
Als $callback kann eine einfache Funktion (als String), eine anonyme Funktion (Closure), ein Array aus Objekt und Methodenname ([$obj, 'method']) oder ein Array aus Klassenname und statischer Methode (['Klasse', 'methode']) übergeben werden. Alle weiteren Argumente werden der aufgerufenen Funktion direkt als Parameter übergeben.
Im Gegensatz zu call_user_func_array() werden die zusätzlichen Parameter nicht als Array, sondern einzeln übergeben. Wenn eine variable Anzahl von Argumenten als Array vorliegt, sollte stattdessen call_user_func_array() verwendet werden.
Hinweis: Seit PHP 5.4 und besonders seit PHP 7 wird in vielen Fällen die direkte Syntax $callback(...$args) bevorzugt, da sie idiomatischer und oft performanter ist. call_user_func() bleibt jedoch relevant, wenn die Übergabe eines callable als Variable im Vordergrund steht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $callback Pflicht | callable | Die aufzurufende Funktion oder Methode als callable. Erlaubt sind: Funktionsname als String, Closure, [$objekt, 'methode'] oder ['Klasse', 'statischeMethode']. |
|
| $args | mixed | Beliebig viele zusätzliche Argumente, die einzeln an die Callback-Funktion übergeben werden. |
Rückgabewert
false im Fehlerfall (z.B. wenn der Callback nicht aufrufbar ist).Beispiele
Einfachen Funktionsnamen als Callback übergeben
<?php
function begruessung(string $name): string {
return "Hallo, $name!";
}
$ergebnis = call_user_func('begruessung', 'Welt');
echo $ergebnis;
Objektmethode als Callback aufrufen
<?php
class Rechner {
public function addiere(int $a, int $b): int {
return $a + $b;
}
}
$rechner = new Rechner();
$ergebnis = call_user_func([$rechner, 'addiere'], 10, 25);
echo $ergebnis;
Statische Methode als Callback aufrufen
<?php
class MathHelper {
public static function quadrat(int $n): int {
return $n * $n;
}
}
$ergebnis = call_user_func(['MathHelper', 'quadrat'], 7);
echo $ergebnis;
// Alternativ mit String-Syntax:
$ergebnis2 = call_user_func('MathHelper::quadrat', 9);
echo PHP_EOL . $ergebnis2;
Closure als Callback übergeben
<?php
$verdoppeln = function(int $wert): int {
return $wert * 2;
};
$ergebnis = call_user_func($verdoppeln, 21);
echo $ergebnis;
// Wichtig · Fallstricke
Sicherheit: Wird der Callback-Name aus Benutzereingaben bezogen, besteht das Risiko der unbeabsichtigten Ausführung beliebiger Funktionen (z.B. system, exec). Eingaben immer gegen eine Whitelist erlaubter Callbacks prüfen.
Performance: Der direkte Aufruf über eine Variable ($callback()) oder die Spread-Syntax ($fn(...$args)) ist in der Regel schneller als call_user_func(), da kein zusätzlicher Overhead durch das Callable-Lookup entsteht.
Referenz-Parameter: Im Gegensatz zu call_user_func_array() können mit call_user_func() keine Argumente per Referenz übergeben werden – dies führt zu einem Fehler.