PHP 8.4.2 Released!

ReflectionMethod::invoke

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::invokeInvoca un método

Descripción

public ReflectionMethod::invoke(object $object, mixed $... = ?): mixed

Invoca al método reflejado.

Parámetros

object

Objeto al que pertenece el método invocado. En métodos estáticos, se podrá introducir null en este parámetro.

...

Cero o más parámetros para pasar a este método. Acepta un número variable de parámetros, que se pasarán al método.

Valores devueltos

Devuelve el resultado del método.

Errores/Excepciones

Lanza ReflectionException si el parámetro object no contiene una instancia de la clase en la que se declaró este método.

Lanza ReflectionException si fallara la invocación al método.

Ejemplos

Ejemplo #1 Ejemplo de ReflectionMethod::invoke()

<?php
class HolaMundo {

public function
saludarA($nombre) {
return
'Hola ' . $nombre;
}

}

$metodoReflexionado = new ReflectionMethod('HolaMundo', 'saludarA');
echo
$metodoReflexionado->invoke(new HolaMundo(), 'Miguel');
?>

El resultado del ejemplo sería:

Hola Miguel

Notas

Nota:

Si la función tiene argumentos que necesitan ser referencias, éstos deben ser referencias en la lista de argumentos pasados.

Ver también

add a note

User Contributed Notes 3 notes

up
21
rojaro at gmail dot com
13 years ago
Note: If you want to invoke protected or private methods, you'll first have to make them accessible using the setAccessible() method (see http://php.net/reflectionmethod.setaccessible ).
up
8
dimitriy at remerov dot ru
12 years ago
This method can be used to call a overwritten public method of a parent class on an child instance
The following code will output "A":

<?php

class A
{
public function
foo()
{
return
__CLASS__;
}
}

class
B extends A
{
public function
foo()
{
return
__CLASS__;
}
}

$b = new B();

$reflection = new ReflectionObject($b);

$parentReflection = $reflection->getParentClass();

$parentFooReflection = $parentReflection->getMethod('foo');

$data = $parentFooReflection->invoke($b);

echo
$data;

?>
up
0
templargrey at wp dot pl
13 years ago
Seems that Reflection doesn`t resolve late static bindings - var_dump will show "string 'a' (length=1)".

<?php
class ParentClass { protected static $a = 'a'; static public function init() { return static::$a; } }
class
ChildClass extends ParentClass { protected static $a = 'b'; }

$r = new ReflectionClass('ChildClass');
var_dump($r->getMethod('init')->invoke(null));
?>
To Top