![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 108 Pomógł: 0 Dołączył: 7.05.2004 Skąd: Jelenia Góra Ostrzeżenie: (0%) ![]() ![]() |
Witam,
przeczytałem artykuł ze strony głównej pt. 'Budowa interfejsów bazodanowych' i zaintrygowała mnie kwestia dziwnych funkcji zawartych w umieszczonych tam klasach. Z resztą widziałem podobne w innych artykułach. Przytocze tutaj taki przykład z sekcji artykułu zatytułowanej 'Składamy wszystko w całość'.
Jaki jest sens używania tego typu funkcji jak tutaj: setNumPosts(), getNumPosts(), submit() ? Wydaje mi się że kod:
Można z powodzeniem zapisać tak:
A później w destruktorze wysyłać do bazy zgromadzone przez cały czas działania skryptu dane. Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Settery udostepniają mozliwośc np. walidacji danych przed dalszymi akcjami np.:
a definicji klasy:
Ten post edytował LBO 4.07.2006, 21:58:40 |
|
|
![]()
Post
#3
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Cytat A później w destruktorze wysyłać do bazy zgromadzone przez cały czas działania skryptu dane. Nie do końca, ponieważ często zachodzi potrzeba operacji na danych które powinny zostać uakualnione, jeżeli były to destruktor to różnie to bywa. Pisanie za każdym rażem unset" title="Zobacz w manualu php" target="_manual() też nie jest najlepszym pomysłem, dlatego właśnie stosuje się te metody. Wspomne tylko jeszcze, że php udostepnia bardzo ubogi mechanizm dotyczący właściwości klasy. @LBO: Mozna by próbować osiągnąć efekt o którym piszesz, korzystając z magicznej metody __get(), tylko sam nie wiem, jak z zwracaniem wyjątków (z tego co pamiętam to działają aż miło (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście, że można używać magiczne metody, ale:
1. Operacje dodatkowe mogą się od siebie różnić, czyli trzeba by było pokombinować nad rozpoznaniem argumentów. 2. Czy to by były magiczne metody czy wklepane hardcoded nie ma znaczenia - idea ta sama, by uzywać gettery i settery. Temat i objętość artykułu po prostu nie pozwalał na zajęcie się tym i opisanie. Ten post edytował LBO 5.07.2006, 07:33:15 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
@hwao
Mowisz i masz
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
No, i dobrze, bardzo ładnie BigZbig, ale pomimo tej całej otoczki fancy-oprogramowania to nadal to samo, nie uważasz?. Jak dla mnie temat zamknięty, bo jednoznacznie odpowiedzieliśmy czemu metody, a nie bezposrednia aktualizacja zmiennych.
|
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Settery i gettery to w zasadzie jeden z ważniejszych przystanków na drodze ku dobrej hermetyzacji klas. Jak teraz sobie myślę, że ktoś mógłby swoimi brudnymi, obleśnymi łapskami dotykać moich składowych, to mi niedobrze. Interfejs musi być!!!
|
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
nie zapominajmy o ppp. składowe mozna okreslic jako private i juz nikt brudnymi łapskami nic nie zrobi z tym czego nie powinien dotykać.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Klas sie nie hermetyzuje. Hermetyzuje się dane.
|
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Fakt. Dane, nie klasy. Dzieki za zwrócenie uwagi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#11
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
z tego co pamietam to w php5.1 takie cos
Nie przejdzie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Swoja droga to mysalem o troche innym rozwiazaniu mianowiscie $Obiekt-><filtr><wlasciwosc> W wyrazeniu reg. zlapac oco chodzi i odpowiednio przekazac Np: $Object->intId = 'string'; Obiekt rozpozna ze int i poleci do
A potem do wlasciwosci |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
z tego co pamietam to w php5.1 takie cos
Nie przejdzie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Zawsze możesz użyć funkcji method_exists Twoja propozycja rozwiazanie jest malo elastyczna bo ogranicza sie jedynie do rozpoznawania typow. |
|
|
![]()
Post
#13
|
|
Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
mozesz sobie napisac inne typy, ja tylko napisalem najprostrzy
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 108 Pomógł: 0 Dołączył: 7.05.2004 Skąd: Jelenia Góra Ostrzeżenie: (0%) ![]() ![]() |
Czyli jednoznacznie hermetyzacja?
A co mam zrobić w przypadku dużej ilości zmiennych w których zapisane są zwykłe liczby, które nie potrzebują jakiś hermetyzacji ze względu na to, że nie są 'zagrożone' niepożądanymi wynikami wpisywanymi przez użytkownika. Też tworzyć dla każdej takie dodatkowe funkcje ? Ewentualnie stworzyć tablice typu $liczby i funkcje dla tej tablicy ? |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
@MagnuM - niedajmy sie zwariowac. Co prawda ogolnie rzecz biorac zalecane jest definiowanie wlasciwosci jako chronione lub prywatne, ale nie jesli ma to byc sztuka dla sztuki. W koncu poto wymyslono klauzule public aby ja stosowac.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Czyli trzeba to wyważyć, nieprawdaż. Okreslać zmienne jako publiczne, gdy nie trzeba walidować. W przeciwnym razie private i ustawiać setter.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 108 Pomógł: 0 Dołączył: 7.05.2004 Skąd: Jelenia Góra Ostrzeżenie: (0%) ![]() ![]() |
Wszystko jasne, dzieki za odpowiedź.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 14:49 |