Полный цикл в digital

Библиотека Reflection в PHP

Reflection API рефлексия в контексте программирования, это процесс при котором программа может наблюдать и модифицировать свою собственную структуру и поведение во время выполнения.

Классы

Reflection API позволяют узнать всю информацию о классе, функции, методе, исключениях, для этого есть ряд наследников:

ReflectionClass ()

Класс ReflectionClass() предоставляет методы, которые собирают информацию обо всех аспектах заданного класса, в качестве единственного аргумента передается экземпляр класса:

$classInfo = new ReflectionClass(object имя_обьекта) : object

ReflectionObject ()

Расширяет класс ReflectionClass и предоставляет информацию об объекте, в качестве единственного аргумента передается экземпляр класса:

$objectInfo = new ReflectionObject(object имя_обьекта) : object

ReflectionMethod ()

Представляет информацию о методе класса и позволяет вызывать его, в качестве аргумента передается экземпляр класса и название метода:

$methodInfo = new ReflectionMethod(object имя_обьекта, string имя_метода) : object

ReflectionProperty ()

Представляет информацию о свойстве класса и позволяет взаимодействовать с ним, в качестве аргумента передается экземпляр класса и название свойства:

$propertyInfo = new ReflectionProperty(object имя_обьекта, string имя_свойства) : object

ReflectionFunction ()

Представляет информацию о функции и позволяет вызывать ее, в качестве единственного аргумента передается имя функции:

$functionInfo = new ReflectionFunction(string имя_функции) : object

ReflectionParameter ()

Представляет информацию о параметре функции или метода и позволяет получать его характеристики, первый параметр, массив содержащий название класса и название метода, второй параметр, порядковый номер параметра который нам нужен:

$parameterInfo = new ReflectionParameter([string имя_класса, string имя_метода], int порядковый_номер_параметра) : object

ReflectionClassConstant ()

Представляет информацию по элементам перечисления enum:

$constantInfo = new ReflectionClassConstant(
    class: string имя_класса,
    constant: string имя_константы,
);

ReflectionException ()

Исключение, которое может быть выброшено в процессе работы с Reflection API.

Как это работает

Убедитесь, что расширение Reflection API включено в вашей установке PHP. Проверить это можно, выполнив следующий PHP-код:

<?php
    phpinfo();

Для начала нужно создать экземпляр класса ReflectionClass, передав в качестве параметра имя класса:

<?php

#[TestAttribute(123)]
class MyClass
{
    public $property1 = "I'm a public property!";
    protected $property2 = "I'm a protected property!";
    private $property3 = "I'm a private property!";

    public function method1()
    {
        return "I'm a public method!";
    }

    protected function method2()
    {
        return "I'm a protected method!";
    }

    private function method3()
    {
        return "I'm a private method!";
    }
}

$reflectionClass = new ReflectionClass('MyClass');

// выводим имя класса
echo "Class name: " . "<br>" . $reflectionClass->getName() . "<br>";

// выводим информацию о свойствах класса
echo "Properties:" . "<br>";
foreach ($reflectionClass->getProperties() as $property) {
    echo "  - " . $property->getName() . "<br>";
}

// выводим информацию о методах класса
echo "Methods:" . "<br>";
foreach ($reflectionClass->getMethods() as $method) {
    echo "  - " . $method->getName() . "<br>";
}

// выводим атрибуты
echo "Attribute:" . "<br>";
foreach ($reflectionClass->getAttributes() as $attribute) {
    // полное имя атрибута
    var_dump("  - " . $attribute->getName());
    // параметры атрибута
    var_dump("  - " . $attribute->getArguments());
    // возвращает экземпляр new TestAttribute(), для этого должен быть создан атрибут
    var_dump($attribute->newInstance());
}

// экземпляр класса
var_dump($reflectionClass->newInstance());
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!