Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP5 i Singletony
Ozzy
post
Post #1





Grupa: Zarejestrowani
Postów: 204
Pomógł: 0
Dołączył: 26.12.2003
Skąd: Rzeszów

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


Może mnie ktoś oświecić dlaczego używa się singletonów? np:

  1. <?php
  2. class Foo {
  3.  
  4.  
  5. private static $reference;
  6. private $test;
  7.  
  8.  
  9. private function __construct() {}
  10.  
  11.  
  12. public function bar() {
  13.  
  14. $this->test = 'test';
  15. $this->bar2();
  16.  
  17. }
  18.  
  19.  
  20. private function bar2() {}
  21.  
  22.  
  23. public static function getRef() {
  24.  
  25. if(self::$reference == null) {
  26. self::$reference = new Foo();
  27. }
  28.  
  29. return self::$reference;
  30.  
  31. }
  32.  
  33.  
  34. }
  35.  
  36. Foo::getRef()->bar();
  37. ?>


skoro to samo można osiągnąć w ten sposób?:

  1. <?php
  2. class Foo {
  3.  
  4.  
  5. private static $test;
  6.  
  7.  
  8. public static function bar() {
  9.  
  10. self::$test = 'test';
  11. self::bar2();
  12.  
  13. }
  14.  
  15. private static function bar2() {}
  16.  
  17.  
  18. }
  19.  
  20. Foo::bar();
  21. ?>


Widze jakie są różnice, jednak nie rozumiem dlaczego singletony są stosowane skoro zapis Foo::bar(); jest wygodniejszy i kod klasy krótszy...
Czy za pomocą singletonów można zrobić coś, o czym nie wiem?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
hawk
post
Post #2





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


Formalnie rzecz biorąc, singletony nie są potrzebne i da się zrobić to samo na zmiennych "klasowych", czyli tak naprawdę na zmiennych globalnych (jedyna różnica, że zamiast $bar piszemy Foo::$bar). Ale zmienne globalne, jak wiadomo, są brzydkie i bebe, i dlatego w OOP stosuje się singletony.

Zresztą, singletony mogą teoretycznie trochę więcej. Można - choć jest to trudne - zrobić singleton który można inicjować parametrem, używając wyjątków i new (ale to w Javie widziałem (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) ). Można również - choć to również trudne, z uwagi na pokręcony proces inicjacji obiektu - próbować dziedziczenia.

Można wreszcie - i to jest chyba najważniejsze - przekazywać sobie referencje do obiektu singletonowego. Jeżeli mamy singleton Foo implementujący interfejs Bar, to możemy sobie przekazywać referencję do Foo (uzyskaną przez Foo::getInstance() ) i nie zastanawiać się co to jest - implementuje Bar i to wystarcza.

Czyli singleton jest odpowiednikiem kodu globalnego w OOP, i kilka rzeczy specyficznych dla OOP potrafi "dodatkowo" zrobić.

A poza tym, wielkie klasy z samymi metodami statycznymi są oznaką amatorstwa, a mały singleton tu i ówdzie wygląda profesjonalnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post

Posty w temacie
- Ozzy   PHP5 i Singletony   17.03.2004, 16:15:13
- - Cudi   Sigleton pozwala Ci działać na jednej instancji da...   17.03.2004, 16:22:25
- - Ozzy   tak, ale w php5 nie musze używać zmiennych globaln...   17.03.2004, 18:24:14
- - Cudi   Singletony są zastępstwem dla obiektów globalnych ...   17.03.2004, 18:32:08
- - Ozzy   Ja cię rozumiem, ale w php5 nie ma takiej potrzeby...   17.03.2004, 18:38:44
- - Simpson   CytatJa cię rozumiem, ale w php5 nie ma takiej pot...   17.03.2004, 18:44:15
- - Ozzy   Cytatw tej klasie znajduja sie zmienne ktore sa Ci...   17.03.2004, 18:50:55
- - Wankster   Simpson: Ozzy mówił o PHP5, a tam możesz się odwoł...   17.03.2004, 18:51:45
- - Simpson   a no to chyba ze tak. Nie znam aż tak dokłądnie ph...   17.03.2004, 18:53:10
- - Cudi   Tak czy siak singleton może być przydatny, nie będ...   17.03.2004, 18:59:16
- - Ozzy   CytatTak czy siak singleton może być przydatny prz...   17.03.2004, 19:05:17
- - Cudi   Potrzebna by była bardzo rozbudowana klasa, a Ty m...   17.03.2004, 19:55:29
- - Ozzy   z tym się zgodzę, bo sam używam takiego rozwiązani...   17.03.2004, 20:28:38
- - Bora   z static nie można przesadzać bo przez nadmierne u...   17.03.2004, 20:55:40
- - Ozzy   Cytatz static nie można przesadzać bo przez nadmie...   17.03.2004, 21:13:37
- - Cudi   Ja preferuję tworzenie wewnątrz klasy metodę która...   17.03.2004, 21:15:42
- - Bora   CytatCytatz static nie można przesadzać bo przez n...   17.03.2004, 21:24:31
- - Ozzy   Bora: Foo::$bar do zmiennej i Foo::bar do stałej ...   17.03.2004, 21:56:36
- - Cudi   Myśle że właśnie sam sobie odpowiedziałeś na swoje...   18.03.2004, 17:38:42
- - Balin   czy moglibyscie podac linki do artykulow omawiajac...   18.03.2004, 19:07:33
- - Ozzy   http://www.phppatterns.com/index.php/artic...ticle...   18.03.2004, 19:20:04
- - hawk   Formalnie rzecz biorąc, singletony nie są potrzebn...   18.03.2004, 23:42:55
- - Ozzy   CytatA poza tym, wielkie klasy z samymi metodami s...   19.03.2004, 08:02:40


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: 7.10.2025 - 22:37