From a58b6f135830bfa357f11e5126880bdebc750fb5 Mon Sep 17 00:00:00 2001 From: babaev-an Date: Sat, 14 Jun 2025 09:53:55 +0300 Subject: [PATCH] 20250612 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Добавлен атрибут для свойств класса #[GetOnly]. Он маркирует только те свойства, которые имеют только get часть, чтобы при маппинге класс корректно его прошёл. * Улучшен класс ClassMapper. В его базовый метод добавлена проверка на атрибут #[GetOnly]. --- sources/attributes/GetOnly.php | 29 +++++++++++++++++++++++++++ sources/classes/ClassMapper.php | 35 ++++++++++++++++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 sources/attributes/GetOnly.php diff --git a/sources/attributes/GetOnly.php b/sources/attributes/GetOnly.php new file mode 100644 index 0000000..354ca4e --- /dev/null +++ b/sources/attributes/GetOnly.php @@ -0,0 +1,29 @@ + 0 && !in_array($name, $options['allowed'])) // -- пропускаю @@ -71,6 +78,32 @@ final class ClassMapper } } + /** + * Проверяет, есть ли у свойства класса $class атрибуты GetOnly. + * + * @param object $class Объект класса. + * @param string $propertyName Имя свойства. + * + * @return bool true если у свойства есть атрибут GetOnly, иначе false. + */ + private static function HasGetOnlyAttributes (object $class, string $propertyName): bool + { + // Создаем отражение свойства класса + try { + $reflectionProperty = new ReflectionProperty(get_class($class), $propertyName); + } + catch (ReflectionException) { + // - возвращаю false, если произошла ошибка создания отражения свойства класса + return false; + } + + // Получаем список атрибутов у данного свойства + $attributes = $reflectionProperty->getAttributes('GetOnly', ReflectionAttribute::IS_INSTANCEOF); + + // Возвращаем true, если атрибут найден, иначе false + return !empty($attributes); + } + /** * Подготавливает значения свойств класса. *