ReflectionMethod::invoke()
(PHP 5, PHP 7)
Invoke
说明
public ReflectionMethod::invoke(object $object[,mixed $parameter[,mixed$...
]]) : mixed
执行一个反射的方法。
参数
- $object
如果执行的方法是静态类,那么这个参数传送null。
- $parameter
0,或者传送给方法的参数列表。可以通过这个参数,给方法传送大量的参数。
返回值
返回方法的返回值
错误/异常
如果$object并没有包含一个可以使用的类实例,那么将产生一个ReflectionException。
如果方法调用失败,也会产生一个ReflectionException。
范例
Example #1ReflectionMethod::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:如果函数有参数需为引用,那么它们必须以引用方式传入。
参见
- ReflectionMethod::invokeArgs() 带参数执行
- __invoke()
call_user_func()
把第一个参数作为回调函数调用
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)); ?>