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
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
msulik
post
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

Ostrzeżenie: (0%)
-----


Myślę, że zimiemu chodziło o Paamayim Nekudotayim - ja dołączam się do jego rozterek:

  1. <?php
  2.  
  3. AntySingleton :: init();
  4. class AntySingleton
  5. {
  6. private static $a = array();
  7. private static $o = null;
  8.  
  9. private function __construct()
  10. {
  11. // Zamiast $this -> a
  12. self :: $a = array(201 => 101, 202 => 102, 203 => 103);
  13. }
  14.  
  15. public static function init()
  16. {
  17. self :: $o || self :: $o = new self();
  18. }
  19.  
  20. public static function getA($i)
  21. {
  22. return self :: $a[$i];
  23. }
  24.  
  25. public function __destruct()
  26. {
  27. // Sprzatanie, zamykanie polaczen itp.
  28. foreach (self :: $a as $i => $v) { unset(self :: $a[$i]); }
  29. }
  30. }
  31.  
  32. echo AntySingleton :: getA(201) . '<br />';
  33. echo AntySingleton :: getA(203) . '<br />';
  34.  
  35. ?>


Aktualnie pracuję w kodzie, w którym używanych jest kilkanaście singletonów i za każdym razem, gdy chcę użyć choć jednej metody z jakiejś klasy, muszę najpierw załadować sobie obiekt:
Kod
$this -> objJakisObiekt = JakasWspanialaKlasa :: getInstance();
a potem używać tego obiektu:
Kod
$this -> objJakisObiekt -> getCostam();


W skrócie: mnóstwo niepotrzebnego pisania! Moim zdaniem singleton to marnotrawstwo czasu i kodu. Może kiedyś singleton był jazzy, ale nie widzę przeszkód, by używać powyższej postaci. Czy ktoś mógłby mnie naprostować? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 23:30