PHP: ReflectionFunction::invokeArgs - Manual
(PHP 5 >= 5.1.2, PHP 7, PHP 8)
ReflectionFunction::invokeArgs — Invoca los argumentos de una función
Parámetros
args-
Los argumentos a utilizar durante la invocación, de manera similar al funcionamiento de call_user_func_array().
Valores devueltos
Retorna el resultado de la función invocada.
Historial de cambios
| Versión | Descripción |
|---|---|
| 8.0.0 |
Las claves de args serán interpretadas como los
nombres de los parámetros, en lugar de ser ignoradas silenciosamente.
|
Ejemplos
Ejemplo #1 Ejemplo con 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'));
?>
El ejemplo anterior mostrará:
Ejemplo #2 Ejemplo para ReflectionFunction::invokeArgs() con referencias
<?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);
?>
El ejemplo anterior mostrará:
array(2) {
[0]=>
bool(false)
[1]=>
int(0)
}
Notas
Nota:
Si la función tiene argumentos que necesitan ser referencias, entonces deben ser pasados por referencia en la lista de argumentos.
Ver también
- ReflectionFunction::invoke() - Invoca una función
- ReflectionFunctionAbstract::getNumberOfParameters() - Obtiene el número de argumentos
- __invoke()
- call_user_func_array() - Llama a una función de retorno con los argumentos agrupados en un array
Found A Problem?
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.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 ...