文字

ReflectionMethod::invoke

(PHP 5)

ReflectionMethod::invokeInvoke

说明

public mixed ReflectionMethod::invoke ( object $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:

如果函数有参数需为引用,那么它们必须以引用方式传入。

参见

  • ReflectionMethod::invokeArgs() - 带参数执行
  • __invoke()
  • call_user_func() - 把第一个参数作为回调函数调用

用户评论:

[#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 
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 ).

上一篇: 下一篇: