Этап
Готова
Тип
Исследование
Приоритет
Обычный
Трудоемкость
Обычная
Создана
Дата создания
3 года назад
Назначена
Обновлена
2 года назад

В php8 привезли нативные перечисления. Если в tndt-26 мы легко и оперативно перейдем на него, стоит рассмотреть замену MyClubsEnum нативными перечислениями. Дока по phpEnum: https://www.php.net/manual/ru/language.enumerations.php

Как минимум их надо сравнить и понять, что нативные перечисления нам дадут, а чего лишат.

  • Плюс нативных перечислений доктрина (версии 2.11) научилась с ними работать без регистрации каждого их них отдельным типом. https://www.doctrine-project.org/2022/01/11/orm-2.11.html
    #[Column(type: 'string', enumType: Suit::class)]
    public $suit; 

Панель управления

Комментарии могут оставлять только авторизованные пользователи
 demius 2 года назад

Решено. Переделку оставшихся enum сделаем в рамках tndt-140

 demius 2 года назад

Перевели еще пару енамов на пхп. Все становится только проще. Мы пока не трогали сложные и популярные, вроде dictionaryType. Но в целом вопрос решенный, думается можно закрывать, или превращать в задачу на рефакторинг.

 demius 2 года назад

https://github.com/twigphp/Twig/issues/3681 вот здесь предлагают вариант решения этой проблемы, но великий товарищ stof пока в код не принимает, по вопросам безопасности. В целом пока можно завести свою, до принятия решения в twig.

В целом кажется, что за php-enum будущее, так что нравится не нравится переходить придется. И мне, в целом, нравится.

 demius 2 года назад

А вот и первый минус в php8 enum. Twig с ними так себе работает. Т.е. сложно сделать что-то вроде {% if doc.state == DocStateEnum::Deprecated %}. Пока что мы обошлись, просто забрав расчет набора контролов в контроллер, но не всегда это будет удобно.

 demius 2 года назад

Ну пока я не столкнулся с проблемами, но php enum мне нравится все больше и больше. Правда скорее из-за не любви к SCREAMING_SNAKE_CASE

 demius 2 года назад

за myClubs/Enum - в phpeum элементы перечисления не константы

  • но можно как взять из неё константу ActivityTypeEnum::TaskEdit->value()
  • вот метода equal у перечисления нет и сравнить $enum == $scalar не выйдет, но можно мягко и попробовать инстанцировать, (в случае неудачи вернет null, который не бдуте равен проверяемому варианту Enum::Case === Enum::tryFrom($scalar)
 demius 2 года назад

https://www.php.net/manual/ru/language.enumerations.methods.php в phpEnum можно использовать static function classes(): array, т.е работа с ними не сильно будет отличаться от MyClubsEnum.

Пока проверяем достаточность этих enum для наших целей на типах активности

 demius 3 года назад
  • за myClubs/Enum - функции keys(), values(), toArray() надо проверить, используем ли мы их (вроде бы нет)
  • за myClubs/Enum - в phpeum элементы перечисления не константы, их не выйдет использовать как Enum::CONST_NAME, если уж enum, то используй везде типом. А вот этим мы частенько пользуемся, чтобы не делать длинные longNameEnum->equal(LongNameEnum::EnumItem())
 demius 3 года назад
  • за phpEnum - у доктрины есть нативная поддержка его, как типа атрибутов. Этого ждут Doc::state и Comment::entityType