Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%)
|
Cześć,
Tak się zastanawiałem ostatnio nad zmianą przyzwyczajeń jeśli chodzi o tą sprawę. Deklarowanie wszystkich składowych jako prywatnych lub chronionych jest ni mniej ni więcej upierdliwe jak pisanie setterów i getterów za pomocą __get() __set(), ale estety trochę mam wrażenie na tym cierpi. Wyskrobałem sobie przed chwilą następujący kod: Tak więc się zastanawiam jak to teraz powinno być z tymi modyfikatorami dostępu. Co o tym sądzicie? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Moderatorzy Postów: 2 921 Pomógł: 269 Dołączył: 11.08.2005 Skąd: 127.0.0.1 |
Na początek zamieniłbym metodę _propertyExists na __isset.
Poza tym nic nie stoi na przeszkodzie, aby właściwości klasy były publiczne. __set, __get i pozostałem magiczne metody zostały po to wprowadzone, by walidacja typu/zawartości odbywała się w klasie, a nie gdzieś tam w kodzie. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%)
|
__isset owszem z tym że chciałbym żeby w przypadku nie istniejącej właściwości skrypt płuł mi wyjątkiem czego wydaje mi się nie należy robić przez __isset żeby dać możliwość programiście sprawdzenia czy dana właściwość istnieje.
Czyli nie ma żadnych przeciwskazań. Super. |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
To co obecnie robisz jest kompletnie bez sensu. Jak Ci się nie chce getterów/setterów pisać to wykorzystaj do tego IDE. W Przypadku PHP chyba jedynie NetBeans ma opcję generowania ich.
|
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%)
|
Nie bierzesz poprawki na to że jakie dobre by to IDE nie było to nie wygeneruje mi setterów z walidacją. Tutaj ona jest najważniejsza. W PHP mogę tylko ustawiać w prototypie nazwy klas, interfejsów i array, ale nic więcej.
|
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
Jaki jest cel tej walidacji? Nie wygląda mi to na sprawdzanie danych pochodzących od użytkownika (formularze itp.), a sprawdzanie samego programisty jest raczej średnim pomysłem. By to miało sens musiałbyś tworzyć wiele skomplikowanych reguł (w końcu ograniczenie się do samego typu to słaba walidacja). W dodatku w PHP jako języku, który nie przykłada większej uwagi do typu danych mogłoby to powodować niepotrzebne "wymuszenia" typu: doSth((int) $id) (bo ID było stringiem).
btw: Źle używasz wyjątków. To co wyrzucasz (instancję jakiej klasy) powinno być uwarunkowane tym co powoduje dany błąd, a nie skąd on pochodzi. W tym przypadku akurat powinieneś wykorzystać istniejącą już klasę InvalidArgumentException i ewentualnie DomainException. |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 999 Pomógł: 30 Dołączył: 14.01.2007 Skąd: wiesz ? Ostrzeżenie: (0%)
|
Ok Crozin argument do mnie dotarł i przestrugałem jedną swoją klasę na coś co wydaje mi się że sugerujesz.
Niestety twoje tłumeczenie odnośnie wyjątków nie trafia do mnie. Jeśli błędna jest zmienna przekazywana do metody to pluję wyjątkiem informując o tym, a nie o tym co się ewentualnie może przez to stać. Zresztą wymienione przez ciebie InvalidArgumentException jest dokładnie tym samym co u mnie PropertyValue tyle tylko że nie nazywam tego InvalidPropertyValue lub PropertyValueException. |
|
|
|
![]() ![]() |
|
Aktualny czas: 10.06.2026 - 13:11 |