ReflectionFunction::invokeArgs
(PHP 5 >= 5.1.0, PHP 7)
ReflectionFunction::invokeArgs — Вызов функции с передачей аргументов
Описание
Вызывает функцию и передает ей аргументы в виде массива.
Список параметров
-
args
-
Передаваемые функции аргументы в виде массива. Поведение функции схоже с call_user_func_array().
Возвращаемые значения
Возвращает результат выполнения вызванной функции.
Примеры
Пример #1 Пример использования 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'));
?>
Результат выполнения данного примера:
Dr. Phil
Пример #2 Пример использования ReflectionFunction::invokeArgs() со ссылками на аргументы
<?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) }
Примечания
Замечание:
Если функция имеет аргументы, которые должны быть ссылками, то они должны быть ссылками и в переданном спике аргументов.
Смотрите также
- ReflectionFunction::invoke() - Вызывает функцию
- ReflectionFunctionAbstract::getNumberOfParameters() - Получает количество аргументов
- __invoke()
- call_user_func_array() - Вызывает пользовательскую функцию с массивом параметров
- 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.