stalxed
Новичок
Замечаю в коде Java и C# что enum прикольная штука.
В php обычно для этой цели использую константы классов. Т.е. проверка инвариантов ложиться на родительский класс, что мне не нравится. Т.е. setGroup($group) в классе User должен проверять, что группа существует. setGroup(GroupEnum $group) кажется куда логичнее(проверку инвариантов осуществляет сам GroupEnum).
Достойные реализации нашёл тут:
http://php.net/manual/en/class.splenum.php
https://github.com/myclabs/php-enum
Конструктор прост, принимает один аргумент, и кидает эксепшен, если значение не существует.
Какие я вижу проблемы:
1) Сравнение со значением:
Тут несколько вариантов:
2) Сравнение двух enumов
Тоже несколько вариантов:
хотя в теории наверное должно работать:
Хотелось бы узнать, есть ли у кого реально достойные примеры реализации enum?
В php обычно для этой цели использую константы классов. Т.е. проверка инвариантов ложиться на родительский класс, что мне не нравится. Т.е. setGroup($group) в классе User должен проверять, что группа существует. setGroup(GroupEnum $group) кажется куда логичнее(проверку инвариантов осуществляет сам GroupEnum).
Достойные реализации нашёл тут:
http://php.net/manual/en/class.splenum.php
https://github.com/myclabs/php-enum
Конструктор прост, принимает один аргумент, и кидает эксепшен, если значение не существует.
Какие я вижу проблемы:
1) Сравнение со значением:
Тут несколько вариантов:
- $group->is(GroupEnum::Admin);
- $group == GroupEnum::Admin;
- GroupEnum::Admin == $group;
2) Сравнение двух enumов
Тоже несколько вариантов:
- $group->isEqual($anotherGroup);
- GroupEnum::compare($group, $anotherGroup);
хотя в теории наверное должно работать:
- $group == $anotherGroup
Хотелось бы узнать, есть ли у кого реально достойные примеры реализации enum?