ScotlandPHP

ReflectionMethod::invoke

(PHP 5, PHP 7)

ReflectionMethod::invoke実行する

説明

public mixed ReflectionMethod::invoke ( object $object [, mixed $parameter [, mixed $... ]] )

メソッドを実行します。

パラメータ

object

メソッドを実行するオブジェクト。静的メソッドを実行する場合は、このパラメータには null を渡すことができます。

parameter

メソッドに渡すパラメータ。可変長のパラメータを渡すことができます。

返り値

メソッドの結果を返します。

エラー / 例外

メソッドが宣言されているクラスのインスタンス以外を object パラメータで指定すると ReflectionException が発生します。

メソッドの実行に失敗すると ReflectionException が発生します。

例1 ReflectionMethod::invoke() の例

<?php
class HelloWorld {

    public function 
sayHelloTo($name) {
        return 
'Hello ' $name;
    }

}

$reflectionMethod = new ReflectionMethod('HelloWorld''sayHelloTo');
echo 
$reflectionMethod->invoke(new HelloWorld(), 'Mike');
?>

上の例の出力は以下となります。

Hello Mike

注意

注意:

関数の引数の中に参照渡しを要するものがある場合は、 渡す引数の中でも参照にしておく必要があります。

参考

add a note add a note

User Contributed Notes 3 notes

up
10
rojaro at gmail dot com
6 years ago
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 ).
up
5
dimitriy at remerov dot ru
5 years ago
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;

?>
up
2
templargrey at wp dot pl
6 years ago
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));
?>
To Top