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 ).
(PHP 5, PHP 7, PHP 8)
ReflectionMethod::invoke — Invoca un método
Invoca al método reflejado.
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.
Devuelve el resultado del método.
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.
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
Nota:
Si la función tiene argumentos que necesitan ser referencias, éstos deben ser referencias en la lista de argumentos pasados.
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 ).
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;
?>
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));
?>