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.

2 Stron V  < 1 2  
Reply to this topicStart new topic
> Rejestr vs Singleton vs global, co jest lepsze
zimi
post 23.08.2007, 15:19:58
Post #21





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


zaczęło mnie ostatnio dręczyć jedno pytanie,
jaka jest przewaga (anty)wzorca (zależy od punktu siedzenia) Singleton od klasy z atrybutami i metodami statycznymi, że używany jest Singleton
efekty można uzyskać w sumie podobne
Go to the top of the page
+Quote Post
NuLL
post 27.08.2007, 18:49:06
Post #22





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


A wiesz jaka jest roznica pomiedzy metodami statycznymi a dynamicznymi ? Toc to podstawy programowania obiektowego a Ty z czyms takim na Pro wyjezdzasz wacko.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
msulik
post 28.08.2007, 09:04:16
Post #23





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ć? smile.gif


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
Cysiaczek
post 28.08.2007, 10:11:37
Post #24





Grupa: Moderatorzy
Postów: 4 463
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@msulik - to zależy, co kto woli. Nic jednak nie stoi na przeszkodzie, aby singleton podpiąć pod składową - wtedy masz dalej singleton, a np. w jakiejś klasie bazowej ładujesz go do zmiennej i pochodne używają sobie $this->singleton->costam. Grunt, że bazowa może go sobie pozyskać, a My nieco jeszcze odtłuszczamy singletona i zyskujemy w ten sposób elastyczność kodu.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
zimi
post 28.08.2007, 21:22:54
Post #25





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


@NuLL: ogólnie pojęcie "dynamiczne metody" nie jest chyba powszechnie przyjętym albo je przeoczyłem, ale nieważne, tak znam tą różnicę ale chyba nie do końca mnie zrozumiałeś...
@msulik
Cytat
Myślę, że zimiemu chodziło o Paamayim Nekudotayim

tego zdania nie bardzo rozumiem, z tego co mi wiadomo to "Paamayim Nekudotayim" jest jedynie śmieszną nazwą dla tego podwójnego dwukropka którego się używa przed metodami statycznymi (i nie tylko), ale może się mylę
no ja myślałem nawet bez konstruktorów i desktruktorów bo miałem chwilowo jeszcze mniejsze potrzeby, ale na przykład zastosowanie kodu podobnej konstrukcji jak ten @msulika zamiast jakiegoś Singletona do obsługi bazy danych wydaję mi się bardzo dobrym pomysłem

swoją drogą jest dla mnie niezrozumiałe stworzenie operatora :: przez twórców PHP do metod statycznych, w Javie do jednego i drugiego używa się kropki i wszystko jest w porządku... wg mnie :: jedynie utrudnia :/ no ale to taki OT

@Cysiaczek:
Cytat
a My nieco jeszcze odtłuszczamy singletona i zyskujemy w ten sposób elastyczność kodu.

mógłbyś rozwinąć? nie bardzo rozumiem... na czym miałaby polegać ta elastyczność?

czyli nikt nie widzi przeciwwskazań dla takich "statycznych klas", zastanawia mnie tylko po co wymyślali Singleton skoro taka klasa statyczna wydaję się prostsza...

Ten post edytował zimi 29.08.2007, 15:21:55
Go to the top of the page
+Quote Post
MalCom
post 28.08.2007, 21:42:12
Post #26





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.01.2006
Skąd: Wodzisław Śl.

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


Cytat(zimi @ 28.08.2007, 22:22:54 ) *
swoją drogą jest dla mnie niezrozumiałe stworzenie operatora :: przez twórców PHP do metod statycznych, w Javie do jednego i drugiego używa się -> i wszystko jest w porządku... wg mnie :: jedynie utrudnia :/ no ale to taki OT

w cpp jest ., -> i ::, i nikt nie narzeka ;p


--------------------
malcom.pl | xime.xorg.pl | http://wxwidgets.org.pl | software developer c/c++ php perl asm
Go to the top of the page
+Quote Post
wrzasq
post 28.08.2007, 22:13:48
Post #27





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


@zimi: w Javie nie ma zadnych przedrostkow przed zmiennymi typu $ zeby odroznic, czy dany identyfikator jest nazwa klasy czy zmiennej, po prostu dana nazwa musi byc unikalna i na podstawie tego do czego sie odnosci wykonuje sie kod. w PHP musi byc wyraznie powiedziane, czy odwolujesz sie do klasy, czy do obiektu.

co do samych metod statycznych - glowna przeszkoda bylo to, ze we wczesnych wersjach PHP 5 wywolania statyczne byly znacznie wolniejsze od dynamicznych przez co o wiele lepiej bylo nawet za kazdym razem pobierac singleton i wykonywac operacje na instancji, a nie statycznymi metodami klasy.

@MalCom: ale w C++ (i C, bo tam tez sa skladowe struktur) sytuacja jest diametralnie inna >.<. tam zarowno oepratory . jak i -> odnosza sie do dynamicznych skladowych, tylko zaleznie od tego czy istancji, czy wskaznika.


--------------------
Go to the top of the page
+Quote Post
MalCom
post 28.08.2007, 22:24:11
Post #28





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.01.2006
Skąd: Wodzisław Śl.

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


@wrzasq: Ale jakby nie patrzec sa az 3 operatory dla obiektow, w tym osobny dla statycznych i nikt nie narzeka na to winksmiley.jpg
Ja sie boje tego, aby php zbytnio nie upodabnialo sie do javy ;p


--------------------
malcom.pl | xime.xorg.pl | http://wxwidgets.org.pl | software developer c/c++ php perl asm
Go to the top of the page
+Quote Post
zimi
post 28.08.2007, 22:33:59
Post #29





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


Cytat
w PHP musi byc wyraznie powiedziane, czy odwolujesz sie do klasy, czy do obiektu

no i przedrostek $ o którym wspomniałeś Ci nie wystarczy? odwołujesz się do klasy masz T_STRING, do obiektu masz T_VARIABLE a za nim mogłoby być -> no i spoko ja nie widzę problemu

Cytat
glowna przeszkoda bylo to, ze we wczesnych wersjach PHP 5 wywolania statyczne byly znacznie wolniejsze od dynamicznych

no to już ma jakiś sens, niemniej Singleton również propagowany jest w innych językach programowania np. we wspomnianej przeze mniej Javie gdzie podobno wywoływanie metod statycznych jest krótszym procesem...
Go to the top of the page
+Quote Post
Cysiaczek
post 29.08.2007, 06:45:12
Post #30





Grupa: Moderatorzy
Postów: 4 463
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Cytat
mógłbyś rozwinąć? nie bardzo rozumiem... na czym miałaby polegać ta elastyczność?
Jeżeli sam singleton to taka dana globalna, to wypada, aby programista zminimalizował ilość odwołań poprzez getInstance().Jeśli wyprowadzasz 5 klas z jednej bazowej i wiesz, że każda wykorzysta w którymś momencie obiekt singletona, to w klasie bazowej przypisujesz go do składowej, co może (choć nie musi) wpływać pozytywnie na hermetyzację zestawu klas.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
msulik
post 29.08.2007, 12:48:40
Post #31





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

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


Cytat(zimi @ 28.08.2007, 22:22:54 ) *
@msulik
z tego co mi wiadomo to "Paamayim Nekudotayim" jest jedynie śmieszną nazwą dla tego podwójnego dwukropka którego się używa przed metodami
No to "Scope Resolution Operator", jak wolisz winksmiley.jpg Ale dokładnie o to mi chodziło smile.gif Nie byłoby tej dyskusji, gdyby twórcy PHP od początku zaprojektowali ten język jako obiektowy i użyli kropki jako separatora, a nie jako konkatenacji.


Czy ktoś może wie, jak się nazywa konstrukcja przedstawiona przeze mnie powyżej? Bo to jest taka hybryda: niby singleton, ale nie do końca, bo nie pobieramy instancji; niby klasa tylko z metodami statycznymi, ale nie do końca, bo posiada instancję.


--------------------
misiu | chór

"Zdeterminowany programista potrafi stworzyć fatalny kod w każdym języku"
Allen Holub
Go to the top of the page
+Quote Post
Sh4dow
post 4.09.2007, 14:07:53
Post #32





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

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


Cytat
...
Czy ktoś może wie, jak się nazywa konstrukcja przedstawiona przeze mnie powyżej? Bo to jest taka hybryda: niby singleton, ale nie do końca, bo nie pobieramy instancji; niby klasa tylko z metodami statycznymi, ale nie do końca, bo posiada instancję.


Gdyby nie ta instancja to wyglada jak zbiur funkcji w "panierce obiektowej". Z tym nie wiele da sie zrobic, bo dostepu do instancji nie ma wiec ciezko to gdzies zapisac, serializowac, czy zrobic klona. Wiec raczej okreslil bym to tworem mało określonym albo nie wiem Mało sprytnym(bez urazy, ale mowie o tej klasie co napisales wczesniej) ?
Cos takiego mozna wykozystac jako magazyn, ale i tak jest wtedy zbedna instacja.


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
zimi
post 5.09.2007, 20:44:42
Post #33





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


Cytat
Cos takiego mozna wykozystac jako magazyn, ale i tak jest wtedy zbedna instacja.

po to jest destruktor żeby sam po sobie sprzątał to jest wg mnie jedyny cel egzystencji tej instancji, ale nie można powiedzieć że jest ona bezcelowa
Go to the top of the page
+Quote Post

2 Stron V  < 1 2
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: 18.09.2019 - 19:22