(PHP 4 >= 4.0.4, PHP 5)
call_user_func_array — Appelle une fonction utilisateur avec les paramètres rassemblés en tableau
Appelle la fonction utilisateur function avec les paramètres param_arr , rassemblés dans un tableau.
La fonction à appeler.
Les paramètres à passer à la fonction, sous la forme d'un tableau indexé.
Retourne le résultat de la fonction, ou FALSE si une erreur survient.
Exemple #1 Exemple avec call_user_func_array()
<?php
function debug($var, $val)
{
echo "***DEBUGGING\nVARIABLE: $var\nVALUE:";
if (is_array($val) || is_object($val) || is_resource($val)) {
print_r($val);
} else {
echo "\n$val\n";
}
echo "***\n";
}
$c = new StdClass();
$host = $_SERVER["PHP_SELF"];
call_user_func_array('debug', array("host", $host));
call_user_func_array('debug', array("c", $c));
call_user_func_array('debug', array("_POST", $_POST));
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
***DEBUGGING VARIABLE: host VALUE: - *** ***DEBUGGING VARIABLE: c VALUE:stdClass Object ( ) *** ***DEBUGGING VARIABLE: _POST VALUE:Array ( ) ***
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";
}
}
// Depuis PHP 5.3.0
call_user_func_array(__NAMESPACE__ .'\Foo::test', array('Hannes'));
// Depuis PHP 5.3.0
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))); /* Depuis PHP 5.3.0 */
?>
L'exemple ci-dessus va afficher :
int(8)
Note: Les variables référencées dans le paramètre param_arr sont passées à la fonction par référence, les autres sont passées par leur valeur. En d'autres termes, cela ne dépend pas de la signature de la fonction suivant que le paramètre est passé par valeur ou par référence.