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
Invoca un método reflejado.
object
El objeto sobre el cual invocar el método. Para los métodos estáticos, se debe pasar null como argumento.
args
Argumentos a pasar al método. Esto acepta un número variable de argumentos que serán pasados al método.
Retorna el resultado del método.
Una ReflectionException si object
no es una instancia de la clase de la cual el método fue declarado.
Una ReflectionException si la invocación del método falla.
Ejemplo #1 Ejemplo con ReflectionMethod::invoke()
<?php
class HelloWorld {
public function sayHelloTo($name) {
return 'Hello ' . $name;
}
}
$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo $reflectionMethod->invoke(new HelloWorld(), 'Mike');
?>
El resultado del ejemplo sería:
Hello Mike
Nota:
ReflectionMethod::invoke() no puede ser utilizado cuando se esperan argumentos por referencia. ReflectionMethod::invokeArgs() debe ser utilizado en su lugar (pasando las referencias en la lista de argumentos).
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));
?>