ReflectionFunction::invokeArgs
(PHP 5 >= 5.1.0)
ReflectionFunction::invokeArgs — Invokes function args
Description
Invokes the function and pass its arguments as array.
Parameters
-
args
-
The passed arguments to the function as an array, much like call_user_func_array() works.
Return Values
Returns the result of the invoked function
Examples
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'));
?>
The above example will output:
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);
?>
The above example will output:
array(2) { [0]=> bool(false) [1]=> int(0) }
Notes
Note:
If the function has arguments that need to be references, then they must be references in the passed argument list.
See Also
- ReflectionFunction::invoke() - Invokes function
- ReflectionFunctionAbstract::getNumberOfParameters() - Gets number of parameters
- __invoke()
- call_user_func_array() - Call a callback with an array of parameters
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Reflection
- Функция ReflectionFunction::__construct() - Конструктор класса ReflectionFunction
- Функция ReflectionFunction::export() - Экспорт функции
- Функция ReflectionFunction::getClosure() - Возвращает динамически созданное замыкание для функции
- Функция ReflectionFunction::invoke() - Вызывает функцию
- Функция ReflectionFunction::invokeArgs() - Вызов функции с передачей аргументов
- Функция ReflectionFunction::isDisabled() - Проверяет, что функция отключена
- Функция ReflectionFunction::__toString() - Представление в виде строки
Коментарии
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 ...
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.