Skip to content
This repository has been archived by the owner on Jun 7, 2019. It is now read-only.

Класс ReflectionClass (RU)

Максим Тарасов edited this page May 12, 2019 · 3 revisions

PHP SDK: ReflectionClass.php
Java Source: ReflectionClass.java
Namespace: java\reflection

Описание:

ReflectionClass представляет с собой обёртку над Class из Java. этот класс предназначен для манипуляции Java классами. Этот класс может создавать экземпляры ReflectionObject а так же находить и выполнять методы классов.

Функции класса:

  • newInstance - создаёт новый экземпляр класса без вызова конструктора. Возвращает ReflectionObject
  • getConstructor - получить получить экземпляр ReflectionConstructor данного класса, по массиву из ReflectionClass
  • getDeclaredConstructor - почти тоже самое что getConstructor, только ищет и по родителям класса
  • getMethod - получить получить экземпляр ReflectionMethod для данного метода, по массиву из ReflectionClass и имени метода
  • getDeclaredMethod - почти тоже самое что getMethod, только ищет и по родителям класса
  • getField - получить получить экземпляр ReflectionField для данного поля класса по имени
  • getDeclaredField - почти тоже самое что getField, только ищет и по родителям класса
  • getMethods - получить массив всех методов данного класса
  • getDeclaredMethods - получить массив всех методов данного и родительских классов
  • getConstructors - получить массив всех конструкторов данного класса
  • getDeclaredConstructors - получить массив всех конструкторов данного и родительских классов
  • getFields - получить массив всех полей данного класса
  • getDeclaredFields - получить массив всех полей данного и родительских классов
  • getName - возвращает имя класса
  • getCanonicalName - возвращает полное имя класса

Статические функции:

  • forName - принимает в себя строку с полным именем Java класса и возвращает экземпляр ReflectionClass.

Пример:

use java\reflection\ReflectionClass;

$class = ReflectionClass::forName("javax.swing.JFrame"); // Получаем ReflectionClass для javax.swing.JFrame
$constructor = $class->getConstructor([ ReflectionClass::forName("java.lang.String") ]); // Получаем конструктор класса
    // javax.swing.JFrame(java.lang.String title)
$instance = $constructor->newInstance([ "Reflection!" ]); // Создаем объект из конструктора
$method = $class->getMethod("setVisible", [ ReflectionTypes::typeBool() ]); // Получаем класс метода
    // javax.swing.JFrame.setVisible(bool visible)
$method->invoke($instance, [ true ]); // Выполняем метод

Результат: https://prnt.sc/nnlon2