Reflection API. ReflectionMethod.
Продолжаем изучать отражения. В прошлом уроке мы рассмотрели отражение класса, а в этом разберем отражение методов.
Мы все также будем использовать наш класс User, который находится в файле user.php для изучения этого материала. Перейдем к файлу index.php
<?php
include 'user.php';
$rm = new ReflectionMethod('Users\User', 'getData');
echo '<pre>';
echo print_r(get_class_methods($rm));
echo '</pre>';
?>
Чтобы создать отражение метода, нужно использовать класс ReflectionMethod и передать в его конструктор первым параметром название нашего класса, а вторым - название метода. Чтобы просмотреть все методы, которые содержит класс ReflectionMethod, мы, как и в прошлом уроке, используем get_class_methods() функцию. Рассмотрим некоторые из методов.
<?php
echo $rm->isPublic();
echo $rm->isProtected();
echo $rm->isPrivate();
?>
Эти три метода вернут 1, если метод публичный/защищенный/приватный или не вернут ничего, если это не так.
<?php
echo $rm->isStatic();
echo $rm->isConstructor();
echo $rm->isDestructor();
?>
Данные три метода проверяют, является ли метод статическим/конструктором/деструктором.
Подобных методов много, рассмотреть их все вы можете сами, а мы перейдем к одной часто используемой возможности - invoke. Invoke позволяет вызвать наш метод.
<?php
$user = new Users\User;
$rm->invoke($user);
?>
В качестве параметра данному методу следует передать объект нашего класса, чтобы указать в контексте какого класса слудует вызвать метод.
Если вам нужно передать вызываемому методу какие-то параметры, то следует воспользоваться invokeArgs.
<?php
$user = new Users\User;
$rm->invokeArgs($user, ['data']);
?>
Он отличается от invoke только тем, что вторым параметром мы можем передать аргументы в виде массива. Если ваш метод возвращает какой-то результат, то вы можете присвоить его переменной или вывести на экран.
<?php
$data = $rm->invokeArgs($user, ['data']);
?>
Итак, на этом я заканчиваю вторую статью, посвященную Reflection API. Сегодня мы разобрались, как использовать отражение методов(ReflectionMethod). До свидания.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.