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)
ReflectionMethod::invoke — Invoke
Invokes a reflected method.
object
The object to invoke the method on. For static methods, pass null to this parameter.
parameter
Zero 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::invoke() example
<?php
class HelloWorld {
public function sayHelloTo($name) {
return 'Hello ' . $name;
}
}
$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo $reflectionMethod->invoke(new HelloWorld(), 'Mike');
?>
위 예제의 출력:
Hello Mike
Note:
함수가 인수로 참조를 필요로 하면, 주어진 인수 목록에도 참조여야 합니다.
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));
?>