CakeFest 2024: The Official CakePHP Conference

ReflectionMethod::invoke

(PHP 5, PHP 7, PHP 8)

ReflectionMethod::invokeВызов

Описание

public 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() (передача ссылок в списке аргументов).

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

add a note

User Contributed Notes 3 notes

up
21
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 ).
up
8
dimitriy at remerov dot ru
11 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
12 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