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 )

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

Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 54 гостей онлайн