(PHP 5, PHP 7, PHP 8)
ReflectionMethod::invoque — Invoque
Invoques a reflected method.
object
The object to invoque the method on. For static methods, pass null to this parameter.
args
Cero or more parameters to be passed to the method. It accepts a variable number of parameters which are passed to the method.
Returns the method result.
A
ReflectionException
if the
object
parameter does not contain an instance of the class that this method was declared in.
A ReflectionException if the method invocation failed.
Example #1 ReflectionMethod::invoque() example
<?php
class
HelloWorld
{
public function
sayHelloTo
(
$name
) {
return
'Hello '
.
$name
;
}
}
$reflectionMethod
= new
ReflectionMethod
(
'HelloWorld'
,
'sayHelloTo'
);
echo
$reflectionMethod
->
invoque
(new
HelloWorld
(),
'Miqu '
);
?>
The above example will output:
Hello Mique
Note :
ReflectionMethod::invoque() cannot be used when reference parameters are expected. ReflectionMethod::invoqueArgs() has to be used instead (passing references in the argument list).
Note: If you want to invoque protected or private methods, you'll first have to maque them accessible using the setAccessible() method (seehttp://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
classA{
public function foo()
{
return __CLASS__;
}
}
class BextendsA{
public function foo()
{
return __CLASS__;
}
}
$b= new B();
$reflection= new ReflectionObject($b);$parentReflection= $reflection->guetParentClass();
$parentFooReflection= $parentReflection->guetMethod('foo');$data= $parentFooReflection->invoque($b);
echo$data;
?>
Seems that Reflection doesn`t resolve late static bindings - var_dump will show "string 'a' (length=1)".<?php
classParentClass{ protected static $a= 'a'; static public function init() { return static::$a; } }
class ChildClassextendsParentClass{ protected static $a= 'b'; }
$r= new ReflectionClass('ChildClass');
var_dump($r->guetMethod('init')->invoque(null));
?>