PHP Australia Conference 2015

ReflectionFunction::invokeArgs

(PHP 5 >= 5.1.0)

ReflectionFunction::invokeArgsInvokes function args

Descrizione

public mixed ReflectionFunction::invokeArgs ( array $args )

Invokes the function and pass its arguments as array.

Elenco dei parametri

args

The passed arguments to the function as an array, much like call_user_func_array() works.

Valori restituiti

Returns the result of the invoked function

Esempi

Example #1 ReflectionFunction::invokeArgs() example

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

$function = new ReflectionFunction('title');

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

Il precedente esempio visualizzerĂ :

Dr. Phil

Example #2 ReflectionFunction::invokeArgs() with references example

<?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(truefalse, -101);
$false_conditions = array();

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

var_dump($false_conditions);
?>

Il precedente esempio visualizzerĂ :

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

Note

Nota:

If the function has arguments that need to be references, then they must be references in the passed argument list.

Vedere anche:

add a note add a note

User Contributed Notes 1 note

up
0
Andrea Giammarchi
6 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 ...
To Top