©
This document uses PHP Chinese website manual Release
(PHP 5)
ReflectionMethod::invoke — Invoke
$object
[, mixed $parameter
[, mixed $...
]] )执行一个反射的方法。
object
如果执行的方法是静态类,那么这个参数传送 null 。
parameter
0,或者传送给方法的参数列表。可以通过这个参数,给方法传送大量的参数。
返回方法的返回值
如果 object
并咩有包含一个可以使用的类实例,那么将产生
一个 ReflectionException。
如果方法调用失败,也会产生一个 ReflectionException。
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:
如果函数有参数需为引用,那么它们必须以引用方式传入。
[#1] dimitriy at remerov dot ru [2012-06-06 13:19:35]
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;
?>
[#2] templargrey at wp dot pl [2011-07-21 01:12:21]
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));
?>
[#3] rojaro at gmail dot com [2011-02-10 01:56:58]
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 ).