ReflectionMethod::invoke
(PHP 5, PHP 7)
ReflectionMethod::invoke — Вызов
Описание
Вызывает отображенный метод.
Список параметров
-
object
-
Объект, метод которого требуется вызвать. Для статических методов передается null.
-
parameter
-
Ноль или более аргументов, передаваемых методу. Допускается передавать переменное число аргументов.
Возвращаемые значения
Возвращает результат выполнения метода.
Ошибки
Вызывает исключение ReflectionException, если
в объекте object
нет определения метода.
Вызывает исключение 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::invokeArgs() - Вызов метода с передачей аргументов массивом
- __invoke()
- call_user_func() - Вызывает пользовательскую функцию, указанную в первом параметре
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Reflection
- Функция ReflectionMethod::__construct() - Конструктор класса ReflectionMethod
- Функция ReflectionMethod::export() - Экспорт отраженного метода
- Функция ReflectionMethod::getClosure() - Возвращает динамически созданное замыкание для метода
- Функция ReflectionMethod::getDeclaringClass() - Получает класс, объявляющий отображенный метод
- Функция ReflectionMethod::getModifiers() - Получает модификаторы метода
- Функция ReflectionMethod::getPrototype() - Получает прототип метода (если такой есть)
- Функция ReflectionMethod::invoke() - Вызов
- Функция ReflectionMethod::invokeArgs() - Вызов метода с передачей аргументов массивом
- Функция ReflectionMethod::isAbstract() - Проверяет, является ли метод абстрактным
- Функция ReflectionMethod::isConstructor() - Проверяет, является ли метод конструктором
- Функция ReflectionMethod::isDestructor() - Проверяет, является ли метод деструктором
- Функция ReflectionMethod::isFinal() - Проверяет, может ли метод иметь наследников (final)
- Функция ReflectionMethod::isPrivate() - Проверяет, является ли метод частным (private)
- Функция ReflectionMethod::isProtected() - Проверяет, является ли метод защищенным (protected)
- Функция ReflectionMethod::isPublic() - Проверяет, является ли метод общедоступным (public)
- Функция ReflectionMethod::isStatic() - Проверяет, является ли метод статическим
- Функция ReflectionMethod::setAccessible() - Делает метод доступным
- Функция ReflectionMethod::__toString() - Возвращает строковое представление объекта Reflection method
Коментарии
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 ).
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));
?>
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;
?>