ReflectionFunction::invokeArgs

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionFunction::invokeArgs — Invoque les arguments d'une fonction

Description

public function ReflectionFunction::invokeArgs(array $args): mixed

Invoque la fonction et lui transmet les arguments sous la forme d'un tableau.

Liste de paramĂštres

args

Les paramĂštres Ă  passer Ă  la fonction, sous forme de tableau, tout comme le fonctionnement de call_user_func_array().

Si toutes les clés de args sont numériques, les clés sont ignorées et chaque élément est passé à la fonction comme argument positionnel, dans l'ordre.

Si certaines clés de args sont des chaßnes, ces éléments sont passés à la fonction comme arguments nommés, avec le nom donné par la clé.

Une Error est levée si une clé numérique de args apparaßt aprÚs une clé chaßne, ou si une clé chaßne ne correspond au nom d'aucun paramÚtre de la fonction.

Valeurs de retour

Retourne le résultat de la fonction invoquée.

Historique

Version Description
8.0.0 Les clĂ©s de args seront dĂ©sormais interprĂ©tĂ©es comme les noms des paramĂštres, au lieu d'ĂȘtre silencieusement ignorĂ©es.

Exemples

Exemple #1 Exemple avec ReflectionFunction::invokeArgs()

<?php
function title($title, $name)
{
    return sprintf("%s. %s\r\n", $title, $name);
}

$function = new ReflectionFunction('title');

echo $function->invokeArgs(array('Dr', 'Phil'));
?>

L'exemple ci-dessus va afficher :

Dr. Phil

Exemple #2 Exemple pour ReflectionFunction::invokeArgs() avec des références

<?php
function get_false_conditions(array $conditions, array &$false_conditions)
{
    foreach($conditions as $condition) {
       if(!$condition) {
          $false_conditions[] = $condition;
       }
    }
}

$function_ref = new ReflectionFunction('get_false_conditions');

$conditions       = array(true, false, -1, 0, 1);
$false_conditions = array();

$function_ref->invokeArgs(array($conditions, &$false_conditions));

var_dump($false_conditions);
?>

L'exemple ci-dessus va afficher :

array(2) {
  [0]=>
  bool(false)
  [1]=>
  int(0)
}

Notes

Note:

Si la fonction a des arguments qui ont besoin d'ĂȘtre des rĂ©fĂ©rences, alors ils doivent ĂȘtre passĂ©s par rĂ©fĂ©rences dans la liste des arguments.

Voir aussi

add a note

User Contributed Notes 2 notes

up
0
theyourcomputer at gmail dot com ¶
8 years ago
In the case of call_user_func_array(), if you were to pass around an anonymous function and reference $this within the anonymous function, $this will faithfully refer to the class in the context in which the function was defined. Using ReflectionFunction::invokeArgs() does not seem to retain its original context--yeah, even if you bind the anonymous function before invoking. I recommend call_user_func_array() where context is a concern.
up
0
Andrea Giammarchi ¶
18 years ago
I encountered a weird problem with ReflectionFunction, described in ticket 44139 of PHP Bugs.

If for some reason you need to call with invoke, or invokeArgs, a function like array_unshift (that accepts internally the array by reference) you could use this code to avoid the generated warning or fatal error.

<?php
function unshift(){
    $ref        = new ReflectionFunction('array_unshift');
    $arguments    = func_get_args();
    return        $ref->invokeArgs(array_merge(array(&$this->arr), $arguments));
}
?>

I don't know about performances (you can create an array manually too, starting from array(&$this->something) and adding arguments). However, it seems to work correctly without problems, at least until the send by reference will be usable with one single value ...