PHP 8.6.0 Beta 1 is available for testing

ReflectionMethod::invoke

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::invokeВызов

Описание

public function ReflectionMethod::invoke(? object $object, mixed ...$args): mixed

Вызывает отражённый метод.

Список параметров

object

Объект, метод которого требуется вызвать. Для статических методов передаётся null .

args

Ноль или более аргументов, передаваемых методу. Допускается передавать переменное число аргументов.

Возвращаемые значения

Возвращает результат выполнения метода.

Ошибки

Выбрасывает исключение ReflectionException , если в объекте object нет определения метода.

Выбрасывает исключение ReflectionException , если вызвать метод на исполнение не удалось.

Примеры

Пример #1 Пример использования ReflectionMethod::invoke()

<?php
class HelloWorld {
 public function sayHelloTo($name) {
 return 'Привет, ' . $name;
 }
}
$reflectionMethod = new ReflectionMethod('HelloWorld', 'sayHelloTo');
echo $reflectionMethod->invoke(new HelloWorld(), 'Майк');
?>

Результат выполнения приведённого примера:

Привет, Майк

Примечания

Замечание:

ReflectionMethod::invoke() не может использоваться, если ожидаются ссылочные параметры. Вместо него следует использовать ReflectionMethod::invokeArgs() (передача ссылок в списке аргументов).

Смотрите также

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 3 notes

up
21
rojaro at gmail dot com
15 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
9
dimitriy at remerov dot ru
14 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
0
templargrey at wp dot pl
15 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));
?>
+Добавить

AltStyle によって変換されたページ (->オリジナル) /