PHP: Reflection API — ReflectionProperty

PHP: Reflection API - ReflectionProperty

Класс ReflectionProperty — предоставляет набор методов для получения информации и работы на уровне свойств класса. С помощью этого инструментария можно не только получать информацию, но и принудительно поменять уровень доступа к свойствам.

ReflectionProperty implements Reflector

/* Константы */

  • const integer IS_STATIC = 1;
  • const integer IS_PUBLIC = 256;
  • const integer IS_PROTECTED = 512;
  • const integer IS_PRIVATE = 1024;

/* Свойства */

  • public $ReflectionClass->name;
  • public $class;

/* Методы */

ReflectionProperty::__construct ( mixed $class , string $name )

Конструктор класса. Первый параметр это либо строка — имя класса, либо объект, второй параметр: имя интересующего свойства:

 

class SomeClass

{

  public $prop0 = 333;

  protected $prop1 = 555;

  private $prop2 = 777;  

}

 

var_dump( new ReflectionProperty('SomeClass', 'prop1') );

Эти строки дадут такой результат:

?

object(ReflectionProperty) #1 (2) {

  ["name"]= > string(5)"prop1" ["class"] = > string(9)"SomeClass"

}

Но если свойство рассматриваемого класса окажется private, то PHP сгенерит исключение: 'ReflectionException' с сообщением: 'Свойство SomeClass::$prop3 не существует'

public static string ReflectionProperty::export ( mixed $class , string $name [, bool $return ] )

Предоставляет информацию о свойстве. Первый параметр имя класса или объект, второй параметр — имя свойства, третий (необязательный) параметр отвечает за то, будет ли инфа выведена на экран, или возвращена строкой.

 

class SomeClass

{

  public $prop0 = 333;

  protected $prop1 = 555;

  private $prop2 = 777;   

}

  

Reflection::export( new ReflectionProperty('SomeClass', 'prop1') );

public ReflectionClass ReflectionProperty::getDeclaringClass ( void )

Возвращает информацию о классе исследуемого метода. Результат работы этого метода мне напомнил результат получаемый с помощью : Reflection::export( new ReflectionClass('Exception') ); — Да похоже, что в Reflection API тоже присутствует синтаксичечкий сахар.

синтаксический сахар

public string ReflectionProperty::getDocComment ( void )

Вернёт строку комментария помещённого в файле, где описан класс.

public int ReflectionProperty::getModifiers ( void )

Позволяет получить числовое представление модификаторов.

public string ReflectionProperty::getName ( void )

Вернёт имя свойства

public mixed ReflectionProperty::getValue ( object $object )

Вернёт текущее значение свойства. Если свойство недоступно, или объявлено как protected или private, будет выброшено исключение класса ReflectionException. Но вы можете получить доступ с помощью ReflectionProperty::setAccessible()

public bool ReflectionProperty::isDefault ( void )

Проверка, имеет ли свойство значение по-умолчанию.

public bool ReflectionProperty::isPrivate ( void )
public bool ReflectionProperty::isProtected ( void )
public bool ReflectionProperty::isPublic ( void )

Проверка, уровня доступа свойства.

public bool ReflectionProperty::isStatic ( void )

Проверка, является ли свойство статичным.

public void ReflectionProperty::setAccessible ( bool $accessible )

Метод позволяет сделать доступными закрытые свойства класса, нужно лишь передать параметр true.

public void ReflectionProperty::setValue ( object $object , mixed $value )

Метод позволяет установить значение свойства.

 

Возможно Вас заинтересуют эти материалы

PHP: Reflection API — ReflectionExtension

Класс ReflectionExtension предоставляет методы для работы с расширениями языка. Эта заметка последняя в цикле о

PHP: Reflection API — ReflectionFunction

Класс ReflectionFunction предоставляет методы для работы с функциями языка и функциями, определёнными пользователем в коде,

PHP: Reflection API — ReflectionParameter

Класс ReflectionParameter предоставляет методы для работы с параметрами методов классов, а так же с параметрами