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
Cudi
post
Post #2


Administrator planeta/IRC


Grupa: Przyjaciele php.pl
Postów: 385
Pomógł: 0
Dołączył: 19.04.2003
Skąd: Zabrze

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


Ja preferuję tworzenie wewnątrz klasy metodę która zwróci jej instancję. Dzięki temu moge przesłać parametry, ale jeśli instancja już istnieje to będą one zignorowane. Normalnie mają wartość ustawioną na null. Można też zrobić funkcję która będzie tworzyła hash wartości parametrów i wrzucała do tablicy statycznej z kluczem o wartości hasha i wartością elementu jako referencję do potrzebnej instancji. Dzieki temu będziemy mogli utowrzyć kilka globalnych instancji z różnymi parametrami (choć nie wiem czy podawanie parametrów przy każdym wywołaniu funkcji byłoby rzeczą przyjemną (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ).
Wracając do tematu signleton vs. static, uważam że nie powinno się nadużywać statica, nie potrafie tego niestety uzasadnić (może przyjdzie ktoś mądrzejszy i wytłumaczy), ale mam dziwne wrażenie że jednak coś jest nie tak z tymi staticami, że ich nadurzycie może powodować spadek efektywności lub błędy, bo inaczej wszyscy by się na to rzucili, a jakoś tak się nie stało (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) (AFAIR). Zresztą nie widze żadnej zalety w korzystaniu z :: a -> jeśli chodzi o wygode, prawda, musze zadbać o ściągnięcie instancji w odpowiedni obszar zmiennych, ale jeśli pozwoli mi to zaoszczędzić troche czasu lub zbędnych kłopotów to wole jednak takie rozwiązanie. Musze przyznać że problem mnie zaintrygował, i teraz już sam jestem ciekaw jak to jest z tymi signletonami. Szkoda że nie mam większego doświadczenia z innymi językami obiektowymi, bo tak to cięzko mi cokolwiek powiedzieć aby nie być gołosłownym, same domysły (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 14:17