Start · Sprachen · PHP · Referenz · call_user_func

call_user_func

Funktion

Ruft eine Callback-Funktion oder -Methode dynamisch auf und gibt deren Rückgabewert zurück.

seit PHP 4.0.0 Kategorie: oop

Signatur

call_user_func(callable $callback, mixed ...$args): mixed

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

Typ
mixed
Beschreibung
Gibt den Rückgabewert der aufgerufenen Callback-Funktion zurück, oder 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;
Hallo, Welt!

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;
35

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;
49 81

Closure als Callback übergeben

<?php
$verdoppeln = function(int $wert): int {
    return $wert * 2;
};

$ergebnis = call_user_func($verdoppeln, 21);
echo $ergebnis;
42

// 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.