![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Oddaję dzisiaj pod waszą ocenę klasę enumeratora, którego tak bardzo mi brakuje w PHP (SplEnum to jakieś nieporozumienie). Jak sama nazwa wskazuje jet to standardowy typ wyliczeniowy, zaimplementowany w PHP.
Kod klasy
Przykład użycia
Download, issue tracker i całą resztę znajdziecie na githubie. |
|
|
![]() |
![]()
Post
#2
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Sam kod jest bardzo ładnie napisany, dlatego też nie spodziewam się w tym temacie za dużego ruchu. Także muszę się poczepiać żeby napisać cokolwiek (IMG:style_emoticons/default/smile.gif)
Można ustawić jako string, raczej nie powinno się dopuszczać do takiej możliwości.
Są 2 metody, przydała by mi się jeszcze 3 która zwraca mi Wartość (Values) => Nazwa (Names) Lub metoda, która z Value poda mi Name:
Żeby po uruchomieniu jakiejś metody z parametrem $mUserStatus był output: Kod User status: DELETED
|
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
Cytat Można ustawić jako string, raczej nie powinno się dopuszczać do takiej możliwości. Niestety PHP nie daje możliwości wymuszenia typu prostego. Ale w momencie korzystania z refleksji będę mógł dodać sprawdzenie typu.Cytat Są 2 metody, przydała by mi się jeszcze 3 która zwraca mi Wartość (Values) => Nazwa (Names) Pojawi się metoda toArray i prawdopodobnie iterator.Lub metoda, która z Value poda mi Name: Cytat Żeby po uruchomieniu jakiejś metody z parametrem $mUserStatus był output: Dobry pomysł. Nie potrzebowałem takiej funkcjonalności, ale na pewno się przyda.Kod User status: DELETED |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 262 Pomógł: 39 Dołączył: 12.04.2004 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Gdzie wykorzystujesz tę klasę? Czy jest ona tak naprawdę potrzebna w PHP, czy to raczej sztuka dla sztuki? Czy odpowiednia implementacja interfejsu Iterator lub IteratorAggregate nie byłaby wystarczająca?
|
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
@Bags_Bunny
Dzięki za znalezienie tego babola. Poprawione. @Speedy Równie dobrze sztuką dla sztuki można nazwać interfejsy lub klasy abstrakcyjne. Wymienione przez Ciebie iteratory służą do czegoś zupełnie innego. Zadaniem typu wyliczeniowego jest zebranie w jednym miejscu podobnych do siebie danych. Najlepszym przykładem będą tutaj dni tygodnia lub miesiące. Tworząc typ wyliczeniowy, w kodzie posługujemy się czytelnymi dla ludzi nazwami, natomiast aplikacja otrzymuje liczbę. W ten sposób nie zaśmiecamy klas/konfiguracji zbędnymi informacjami. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Klasy abstrakcyjne i interfejsy akurat są przydatne. Enumeratory mamy też dostępne jako typ pola w tabelach bazy danych, a aplikacje internetowe prawie zawsze bazy wykorzystują, więc można z tego korzystać, choć ja i tak wolę tworzyć sobie tabele słownikowe, bo projekt jest wtedy bardziej czytelny i elastyczny.
|
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 ![]() |
@Speedy
Nie można polegać na zewnętrznych mechanizmach. Co z tego, że baza danych posiada pole typu enum. A jeśli będziemy korzystali z MongoDB lub chmury? Tam nie ma czegoś takiego jak enum. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 12:23 |