call_user_func
call_user_func($callback, $arg, …)
Appelle une fonction passée comme valeur (un nom, une fonction anonyme, une paire [objet, méthode]) avec d’autres paramètres et renvoie son résultat.
Paramètres
- $callback – la fonction à appeler.
- $arg – les paramètres de la fonction, en nombre quelconque.
Exemples
echo call_user_func("strtoupper", "abc"); // ABC
echo call_user_func(function ($a, $b) { return $a + $b; }, 2, 3); // 5
// une méthode d'objet
echo call_user_func(array(new DateTime("2026-10-01"), "format"), "d/m/Y"); // 01/10/2026
// une méthode statique
echo call_user_func("DateTime::createFromFormat", "Y-m-d", "2026-10-01")->format("j/n/Y"); // 1/10/2026
// la même chose en appelant directement une variable
$func = "strrev";
echo $func("abc"); // cba
// une action selon l'entrée, uniquement depuis une liste d'actions autorisées
$allowed = array("majuscules" => "strtoupper", "minuscules" => "strtolower");
$action = "supprimer";
echo isset($allowed[$action]) ? call_user_func($allowed[$action], "Texte") : "action non autorisée"; // action non autorisée
Points d’attention
- N’appelez jamais directement un nom de fonction venant de l’entrée. Un attaquant pourrait appeler par exemple system() ou unlink(). Traduisez l’entrée par un tableau d’actions autorisées, comme dans l’exemple.
- Les paramètres sont passés par valeur. Une fonction qui modifie un paramètre par référence (&) ne renvoie pas la modification.
- Un appel direct $func(…) fait la même chose et se lit mieux. Les paramètres dans un tableau se passent avec call_user_func_array().
Fonctions associées :
call_user_func_array()
is_callable()
function_exists()