ReflectionMethod::invoke
(PHP 5, PHP 7, PHP 8)
ReflectionMethod::invoke — 実行する
パラメータ
object
-
メソッドを実行するオブジェクト。staticメソッドを実行する場合は、このパラメータには null を渡すことができます。
args
-
メソッドに渡すパラメータ。可変長のパラメータを渡すことができます。
戻り値
メソッドの結果を返します。
エラー / 例外
メソッドが宣言されているクラスのインスタンス以外を 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
注意
注意:
ReflectionMethod::invoke() は、 リファレンスが引数に期待されている場合は使えません。 その場合は、(引数リストにリファレンスを渡して) ReflectionMethod::invokeArgs() を代わりに使うべきです。
+add a note
User Contributed Notes 3 notes
rojaro at gmail dot com ¶
13 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 ).
dimitriy at remerov dot ru ¶
12 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;
?>
templargrey at wp dot pl ¶
13 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));
?>
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google