(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
call_user_func_array — Appelle une fonction de rappel avec les paramètres rassemblés en tableau
Appelle la fonction de rappel callback
fournie avec les paramètres args
,
rassemblés dans un tableau.
callback
La fonction de rappel à appeler.
args
Les paramètres à passer à la fonction de rappel, sous la forme d'un tableau.
Si les clés de args
sont toutes numériques,
les clés sont ignorées et chaque élément sera transmis à
callback
en tant qu'argument positionnel, dans
l'ordre.
Si certaines clés de args
sont des chaînes de caractères,
ces éléments seront transmis à callback
en tant qu'arguments nommés, avec le nom donné par la clé.
Il est interdit d'avoir une clé numérique dans args
qui apparaît après une clé de chaîne de caractères, ou d'avoir une clé de chaîne de caractères
qui ne correspond pas au nom d'un quelconque paramètre de callback
Retourne la valeur retournée par la fonction
de rappel, ou false
si une erreur survient.
Version | Description |
---|---|
8.0.0 |
Les clés args seront désormais interprétées comme des noms de paramètres,
au lieu d'être ignorées silencieusement.
|
Exemple #1 Exemple avec call_user_func_array()
<?php
function foobar($arg, $arg2) {
echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
function bar($arg, $arg2) {
echo __METHOD__, " got $arg and $arg2\n";
}
}
// Appel de la fonction foobar() avec 2 arguments
call_user_func_array("foobar", array("one", "two"));
// Appel de la méthode $foo->bar() avec 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four"));
?>
Résultat de l'exemple ci-dessus est similaire à :
foobar got one and two foo::bar got three and four
Exemple #2 Exemple avec call_user_func_array() en utilisant un espace de nom
<?php
namespace Foobar;
class Foo {
static public function test($name) {
print "Bonjour {$name}!\n";
}
}
call_user_func_array(__NAMESPACE__ .'\Foo::test', array('Hannes'));
call_user_func_array(array(__NAMESPACE__ .'\Foo', 'test'), array('Philip'));
?>
L'exemple ci-dessus va afficher :
Bonjour Hannes! Bonjour Philip!
Exemple #3 Utilisation d'une fonction lambda
<?php
$func = function($arg1, $arg2) {
return $arg1 * $arg2;
};
var_dump(call_user_func_array($func, array(2, 4)));
?>
L'exemple ci-dessus va afficher :
int(8)
Exemple #4 En passant une valeur par référence
<?php
function mega(&$a){
$a = 55;
echo "function mega \$a=$a\n";
}
$bar = 77;
call_user_func_array('mega',array(&$bar));
echo "global \$bar=$bar\n";
?>
L'exemple ci-dessus va afficher :
function mega $a=55 global $bar=55
Exemple #5 call_user_func_array() en utilisant des arguments nommés
<?php
function foobar($first, $second) {
echo __FUNCTION__, " got $first and $second\n";
}
// Appeler la fonction foobar() avec des arguments nommés dans un ordre non-positional
call_user_func_array("foobar", array("second" => "two", "first" => "one"));
// Appeler la fonction foobar() avec un argument nommé
call_user_func_array("foobar", array("foo", "second" => "bar"));
// Erreur fatale : Impossible d'utiliser un argument positionnel après un argument nommé
call_user_func_array("foobar", array("first" => "one", "bar"));
?>
Résultat de l'exemple ci-dessus est similaire à :
foobar got one and two foobar got foo and bar Fatal error: Uncaught Error: Cannot use positional argument after named argument
Note:
Notez 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.