©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.1.0)
ReflectionFunction::invokeArgs — Invokes function args
$args
)Invokes the function and pass its arguments as array.
args
The passed arguments to the function as an array, much like call_user_func_array() works.
Returns the result of the invoked function
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' ));
?>
以上例程会输出:
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( true , false , - 1 , 0 , 1 );
$false_conditions = array();
$function_ref -> invokeArgs (array( $conditions , & $false_conditions ));
var_dump ( $false_conditions );
?>
以上例程会输出:
array(2) { [0]=> bool(false) [1]=> int(0) }
Note:
如果函数有参数需为引用,那么它们必须以引用方式传入。
[#1] Andrea Giammarchi [2008-02-16 18:41:55]
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 ...