call_user_func

(PHP 4, PHP 5, PHP 7, PHP 8)

call_user_funcAppelle une fonction de rappel fournie par le premier argument

Description

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

Appelle la fonction de rappel callback fournie par le premier paramètre, avec les autres arguments passés en tant que paramètres.

Liste de paramètres

callback

La fonction de rappel à appeler.

args

0 ou plus de paramètres à passer à la fonction de rappel.

Note:

Il est à noter que les paramètres pour call_user_func() ne sont pas passés par référence.

Exemple #1 Exemple avec call_user_func() par référence

<?php
error_reporting(E_ALL);
function increment(&$var)
{
    $var++;
}

$a = 0;
call_user_func('increment', $a);
echo $a."\n"; 

// il est possible d'utiliser ceci à la place
call_user_func_array('increment', array(&$a));
echo $a."\n";

// il est aussi possible d'utiliser une fonction variable
$increment = 'increment';
$increment($a);
echo $a."\n";
?>

L'exemple ci-dessus va afficher :

Warning: Parameter 1 to increment() expected to be a reference, value given in …
0
1
2

Valeurs de retour

Retourne la valeur retournée par la fonction de rappel.

Exemples

Exemple #2 Exemple avec call_user_func()

<?php
function barber($type)
{
    echo "Vous voulez une coupe $type, aucun problème";
}
call_user_func('barber', "au bol");
call_user_func('barber', "au rasoir");
?>

L'exemple ci-dessus va afficher :

Vous voulez une coupe au bol, aucun problème
Vous voulez une coupe au rasoir, aucun problème

Exemple #3 Exemple avec call_user_func() en utilisant un espace de noms

<?php

namespace Foobar;

class Foo {
    static public function test() {
        print "Hello world!\n";
    }
}

call_user_func(__NAMESPACE__ .'\Foo::test');
call_user_func(array(__NAMESPACE__ .'\Foo', 'test'));
?>

L'exemple ci-dessus va afficher :

Hello world!
Hello world!

Exemple #4 Utilisation d'une méthode de classe avec call_user_func()

<?php

class maclasse {
    static function dit_bonjour()
    {
        echo "Bonjour!\n";
    }
}

$classname = "maclasse";

call_user_func(array($classname, 'dit_bonjour'));
call_user_func($classname .'::dit_bonjour');

$monobjet = new maclasse();

call_user_func(array($monobjet, 'dit_bonjour'));

?>

L'exemple ci-dessus va afficher :

Bonjour!
Bonjour!
Bonjour!

Exemple #5 Utilisation d'une fonction lambda avec call_user_func()

<?php
call_user_func(function($arg) { print "[$arg]\n"; }, 'test');
?>

L'exemple ci-dessus va afficher :

[test]

Notes

Note: Il est à noter que les fonctions de rappel enregistrées avec des fonctions comme call_user_func() et call_user_func_array() ne seront pas appelées si une exception n'est pas interceptée alors qu'elle a été lancée dans une précédente fonction de rappel.

Voir aussi