Rejestr vs Singleton vs global, co jest lepsze |
Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
Rejestr vs Singleton vs global, co jest lepsze |
21.07.2007, 19:22:47
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 31.01.2007 Ostrzeżenie: (0%) |
Singleton to takie zmienne superglobalne, utrudniające dodatkowo podmianę pojedynczego komponentu systemu na inny. Jeżeli po prostu użyć zmiennych globalnych (albo nawet rejestru) można przypisać do danej zmiennej/pozycji instancję dowolnej klasy o dowolnej nazwie która ma po prostu określony API współpracujący z danym komponentem. Jeżeli jednak system używa Singletonu to nie jest to możliwe - konieczna jest albo modyfikacja danego komponentu albo utworzenie nowej klasy o nazwie takiej, jakiej rząda ten komponent.
Rejestr działa identycznie jak zmienne globalne, ale jest dużo mniej wygodny w obsłudze i na dodatek jest wolniejszy niż wbudowane w PHP zmienne globalne. Zmienne globalne też jakimś idealnym rozwiązaniem nie są, ale lepszego po prostu w PHP nie ma. Dlatego właśnie ich używam. @bim2 @BTW: tak Ten post edytował LEW21 21.07.2007, 19:23:39 -------------------- Przyjazne użytkownikom polskie wsparcie phpBB3 - phpBB3.PL
|
|
|
23.07.2007, 20:21:20
Post
#2
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 31.01.2007 Ostrzeżenie: (0%) |
thornag, nie można przesadzać ani w jedną ani w drugą stronę Używanie globali wszędzie gdzie się da nie ma najzwyklejszego sensu - po co mi w mojej klasie xnOutput jakiś formularz stworzony przez jakiś kontroler. Trzeba używać ich z głową - wrzucić w nie najważniejsze komponenty, używane tak często że przekazywanie ich jako parametry nie ma sensu. (Chce Ci się przekazywać np. 10 dodatkowych parametrów każdej funkcji, szczególnie że nie koniecznie będzie z nich korzystać? Bo mi raczej nie. A natomiast zapamiętanie ich nazw żeby ich nie nadpisać to już nie jest problem.)
UDAT, prawdę mówiąc nie rozumiem tego co wymyśliłeś Po za tym chcę (i pewnie nie tylko ja) żeby moje skrypty działały na każdym hoście z PHP 5.2 i nie mam (tu też pewnie nie tylko ja) ochoty na prekompilację, więc AOP odpada. -------------------- Przyjazne użytkownikom polskie wsparcie phpBB3 - phpBB3.PL
|
|
|
24.07.2007, 08:38:08
Post
#3
|
|
Grupa: Zarejestrowani Postów: 504 Pomógł: 2 Dołączył: 31.03.2006 Skąd: Londyn Ostrzeżenie: (0%) |
[...](Chce Ci się przekazywać np. 10 dodatkowych parametrów każdej funkcji, szczególnie że nie koniecznie będzie z nich korzystać? Bo mi raczej nie. [...] No wlasnie po to sa takie wzorce jak rejestr zeby nie trzeba bylo do metody przekazywac miliona argumentow. Co do globali jeszcze to popatrz na to z innej strony, mamy zmienne superglobalne POST, GET, i teraz np ja zwyklem dodawac do propjektow komponent ktory na forum najczesciej nazywany jest HttpRequestem. Pelni on role swoistego proxy. Zamiast bezposrednio odwolywac sie do tablic superglobalnych moge to zrobic poprzez metody dostepowe owego proxy, przy czym od razu moge sobie zazyczyc dane przefiltrowane, wyciapkowane czy jeszcze jakie tam sobie zazycze. Sytuacja podobna jest przy rejestrze i zmiennych globalnych. Przyklad kompletnie wyssany z palca. Powiedzmy ze mam ten sobie rejest i jakas metode dostepowa typu getObject, takze...
I tutaj wlasnie zachodzi owo filtrowanie/sprawdzanie/etc zwracanych wartosci. Jesli np obiekt o ktory prosze zostal nadpisany przez jakis inny ktory w kolekcji siedzi pod tym samym kluczem i nie jest to instancja klasy implementujacej okreslony interfejs to od razu sie o tym dowiem, wyjatek, error cokolwiek. Pewnie ze zaargumentujesz ze mozesz zrobic cos jak...
Ale ja zasadniczo nie widze sensu powtarzania tych samych lini co chwile. Biorac pod uwage ze i tak wiekszosc ubolewa nad brakiem kontroli typow zwracanych ktorej w phpie raczej nie bedzie, wzorce typu rejestr pomagaja w jakis sposob bardziej skonkretyzowany niz instrukcja warunkowa na jakas tam kontrole nad tymi typami. Pozatym rozumiem stwierdzenie sztuka dla sztuki czy przerost formy nad trescia. Jesli buduje cos oparte na wzorcu np MVC i wykonuje to tak ze jak to ktos zauwazyl struklturalne kodowanie konczy sie na bootstrapie to nie widze sensu rezygnowac z obiektowych konwencji na rzecz na pierwszy rzut oka wygodniejszego globala. Argument tutaj moze byc taki ze bede robil rejest tylko po to by zachowac wszystko w klasach i zeby pokozaczyc Otoz nie, dla mnie globale to zlamanie podstawowych zasad OOP jak chociazby oslabianie sprzegania czy hermetyzacja. Podoba mi sie jeszcze jeden argument przytoczony powyzej, inni daja sobie rade bez globali wiec dlaczego w PHP ma byc inaczej ? Global jak safe_mode czy register_globals wlasnie to jak dla mnie protezy niesione jeszcze z 3, to to co wyrabia PHP opinie jezyka w ktorym nie da sie porzadnie programowac, i ktorego uzywaja sami amatorzy, bo fakt jest faktem dla amatorow czy tzw 'bedroom warriors' uzycie globala jest po prostu szybsze i wygodniejsze, a jak pisalem amator taki nigdy nie bedzie mial stycznosci z projektem nad ktorym pracuje zespol powiedzmy 40 developerow. Tyle uff ! :roll2: Ten post edytował thornag 24.07.2007, 13:16:52 -------------------- "Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.09.2024 - 01:17 |