Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

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
LEW21
post 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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
LEW21
post 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ę tongue.gif 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ś tongue.gif 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
Go to the top of the page
+Quote Post
thornag
post 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%)
-----


Cytat(LEW21 @ 23.07.2007, 20:21:20 ) *
[...](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...

  1. <?php
  2. $oRegistry->getObj('DB', 'Interface_DB');
  3. ?>


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...
  1. <?php
  2. global $oDB;
  3. if(!$oDB instanceof Interface_DB) throw new Exception();
  4. ?>


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 party.gif 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"

Go to the top of the page
+Quote Post

Posty w temacie
- LEW21   Rejestr vs Singleton vs global   21.07.2007, 19:22:47
- - Cysiaczek   @LEW21 - Odnoszę wrażenie, że nie widzisz zalet re...   21.07.2007, 21:54:22
|- - LEW21   Cytat(Cysiaczek @ 21.07.2007, 22:54:2...   21.07.2007, 23:02:21
- - x3m   CytatDodajmy jeszcze że ten kod wygląda strasznie,...   22.07.2007, 18:29:43
- - menic   A nie lepiej po prostu przekazywać to co nam potrz...   22.07.2007, 19:44:17
- - LEW21   x3m, jeżeli programista zna kod skryptu, to nie zr...   22.07.2007, 23:20:19
- - Turgon   LEW21, takie pomyłki wynikają bardzo często... bar...   23.07.2007, 09:46:27
- - kwiateusz   Lew przy Twoim założeniu każdy programista pracują...   23.07.2007, 12:29:02
- - LEW21   Kwiateusz, bo wygenerowanie jakiejś listy globali ...   23.07.2007, 13:26:49
- - thornag   Hmm niedawno zaczalem pracowac w zespole gdzie pop...   23.07.2007, 13:38:48
- - UDAT   Najpierw chwila polemiki: @LEW21 CytatMusiałbym pr...   23.07.2007, 14:13:08
- - LEW21   thornag, nie można przesadzać ani w jedną ani w dr...   23.07.2007, 20:21:20
|- - thornag   Cytat(LEW21 @ 23.07.2007, 20:21:20 ) ...   24.07.2007, 08:38:08
- - EuReKa   Cytat(thornag @ 24.07.2007, 09:38:08 ...   24.07.2007, 14:28:17
|- - Sedziwoj   Cytat(EuReKa @ 24.07.2007, 15:28:17 )...   24.07.2007, 20:06:45
|- - LEW21   Cytat(Sedziwoj @ 24.07.2007, 21:06:45...   25.07.2007, 00:15:44
- - Sedziwoj   @LEW21 Nie będę Cię przekonywał, życie to zrobi ja...   25.07.2007, 06:26:06
- - Turgon   Ja sam doszedłem do wniosku. Mam gdzieś wszystkie ...   27.07.2007, 16:58:57
- - Kodie   Osobiście wydaje mi się, że używanie zmiennych glo...   29.07.2007, 16:22:39
- - Athlan   Registry to swego rodzaju singletony zrobione z in...   21.08.2007, 16:10:14
- - zimi   zaczęło mnie ostatnio dręczyć jedno pytanie, jaka ...   23.08.2007, 15:19:58
- - NuLL   A wiesz jaka jest roznica pomiedzy metodami statyc...   27.08.2007, 18:49:06
- - msulik   Myślę, że zimiemu chodziło o Paamayim Nekudotayim ...   28.08.2007, 09:04:16
- - Cysiaczek   @msulik - to zależy, co kto woli. Nic jednak nie s...   28.08.2007, 10:11:37
- - zimi   @NuLL: ogólnie pojęcie "dynamiczne metod...   28.08.2007, 21:22:54
|- - MalCom   Cytat(zimi @ 28.08.2007, 22:22:54 ) s...   28.08.2007, 21:42:12
- - wrzasq   @zimi: w Javie nie ma zadnych przedrostkow przed z...   28.08.2007, 22:13:48
|- - MalCom   @wrzasq: Ale jakby nie patrzec sa az 3 operatory d...   28.08.2007, 22:24:11
- - zimi   Cytatw PHP musi byc wyraznie powiedziane, czy odwo...   28.08.2007, 22:33:59
- - Cysiaczek   Cytatmógłbyś rozwinąć? nie bar...   29.08.2007, 06:45:12
- - msulik   Cytat(zimi @ 28.08.2007, 22:22:54 ) @...   29.08.2007, 12:48:40
- - Sh4dow   Cytat... Czy ktoś może wie, jak się nazywa konstru...   4.09.2007, 14:07:53
- - zimi   CytatCos takiego mozna wykozystac jako magazyn, al...   5.09.2007, 20:44:42


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 11:08