Продолжаем изучать отражения. В прошлом уроке мы рассмотрели отражение класса , а в этом разберем отражение методов .

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). До свидания.