-
Notifications
You must be signed in to change notification settings - Fork 52
Static Enumeration vs Non-Static Enumeration Battle ;) #82
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Друзья, а какая глобальная цель этого pullRequest? |
Ну т.к.
куда логичнее чем
собственно текущий enumeration немного костыльный в плане использования! |
т.е. "Showing 19 changed files with 1,493 additions and 13 deletions." ради добавления одного метода? Его можно реализовать по-другому, через lsb и создание временного объекта, например.
А какие еще костыли есть, не считая отсутствия возможности получить лист без инстанцирования? |
т.е. ты предлагаешь еще один костыль :-) я правельно тебя понимаю Женя? |
1,493 additions - там в основном из-за класса MimeType :-) |
Причина почему Enumeration такой какой он есть - до 5.3 в php не было позднего статического связывания. От Enumeration'а как такого никто не предлагает отказываться на данный момент и просто подменить его Enum'ом было бы не правильно, а вот параллельно они вполне себе могут существовать. |
Ну название можно поменять, ну вроде-как нискем не конфликутем! Да и пора бы уже задумываться об namespace-ах ;) |
@dovg
К примеру есть testEnumeration класс с 1000 элементами, создаем список объектов, к примеру 20. что именно происходит в ядре php пока не выяснял. |
А мне в свое время понравилось как Денис делал, что для $className+$id всегда был один инстанс. |
@crazedr0m а почему не прижился такой вариант? |
Это типа синглтона ? ))) ну так это костыль все-же получается Все методобы добится того чтобы работал старый класс Enumeartion вместо Enum приведут к заксотылеванию ))) |
"типа синглтона", но тогда речь шла не о модификации текущего Enumeartion а о новой реализации с использованием get_called_class. @AlexeyDsov это было из другого проекта ) |
это уже оптимизация. Реализация Enum'a - позволяет добавить эту возможность без поломки интерфейса. |
@stev совместимость c Enumeration ломается поболее. То есть если вдруг кто-то менял состояние enumeration'а через setId - то это работать уже не будет корректно. Просто приведет к страшным вещам. А вот если б от последствий защититься, то почему бы тогда не сделать. |
@AlexeyDsov где мной про совместимость с Enumeration написано? я уже как бы мыслями в 1.1.x и Enumeration - не рассматриваю :) |
в 1.1.x Enumeration все так же будут, но deprecated. |
через static в __construct. (не сторонник, для совместимости допускаю) Боле того можно настроить mapping и стратегию.. для определенных Енумов, с прописыванием в конфиге, на подобии дао воркеров, только пока зачем? про "не легкий переезд" - согласен, это сломает BC так как Enumeration прошит и отказ от него пока не произойдет, несколько этапов понадобится. В итоге апнуть первый индекс "новой вехи" и в отдельную ветку. Новые проекты уже на этом делать. onPHP не раз менялся ломая BC, а что делать, нужно развиваться. |
@stev Новые проекты это круто, но не каждый день их начинаешь. И обновления хочется максимально использовать в текущих проектах. Патчи и фичи в onPHP идут из них, а не из будуйщих проектов. Перейти с Enumeration'а на вариант который сейчас в Pull Request'е, вполне реально при этом не сильно перелопачивая весь код. Нужно буквально поправить сами Enumeration'ы и изменить их тип в мете. Если добавить уникальные Enum'ы - это будет требовать большего рефакторинга и внимания - надо просматривать/искать все строки кода которые их используют по всему проекту. |
Кстати логично было бы сделать в случае вызова метода setId у Enum-а выкидывать UnsupportedMethodException ? |
core/Base/Enum.class.php
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Еще раз рассматривал классы, вот тут вот можно сделать не через get_called_class(), а просто:
return new static($id);
Небольшие правки + имплементирование интерфейса ListedPrimitive |
Вроде теперь все сделано? |
Я думаю можно мержить, если что полезет то в порядке фиксов или фич :) Отправлено с iPhone 26.04.2012, в 0:02, Alexey [email protected] написал(а):
|
Static Enumeration aka Enum
Замержил. Соотвественно в мастере (1.1) оно будет, а в 1.0 не идет. |
Собственно сюда приаттачю решение шде Enumeration реализованно через Static свойства
Немного истории: Сейчас у нас класс Enumeration выглядит как обычный класс с неститчным свойством $names
и совсем непонятно зачем создавать обьект чтобы, к примеру получить ids или получить названия (алиас)
вообщем не логично, по скорости работы и потребелнию памяти мы с stev тестили одинаково ))), он не даст мне соврать )))