Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Singleton - O Co W Tym Biega?
gkeb
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 6.03.2004

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


W paru miejscach forum i nie tylko bylo pisane o wzorcu singleton ale jakos nigdzie nie znalazlem wiekszej informacji o tym. Czy ktos moglby podac jakies linki dotyczace tego tematu?? Albo napisze o co w tym biega (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
matid
post
Post #2





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

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


Cytat(hawk @ 2004-08-24 23:21:12)
A w ogóle to singleton nie powinien mieć parametrów, i już. Kropka. Jak coś przyjmuje parametry, to nie jest to singleton. Bo jak coś ma parametry, to trzeba to gdzieś bezpośrednio stworzyć, a cała idea singletonu polega na tym, że on sam się tworzy i nie obchodzi nas kiedy to się stanie.

Ale jak np. potrzebujemy wywołać klasę do obsługi bazy danych, która potrzebuje x parametrów, a później chcemy ją wykorzystywać w projekcie i tylko poprzez singleton wywoływać jej instancję to też jest to dobre rozwiązanie. W sumie można to obejść tworząc sobie w klasie Singleton metodę RegisterInstance i normalnie stworzyć sobie obiekt mysql i potem go zarejestrować w singleton'ie.
Ja osobiście jak potrzebuje Singleton z obsługą parametrów to korzystam z tego kodu:

  1. <?php
  2.  
  3. class Singleton
  4. {
  5. static private $arrInstances = array();
  6. static private $strClassesDir = 'classes';
  7.  
  8. /**
  9. * @desc Tworzy instancję klasy
  10. * @access public
  11. **/
  12. static public function Instance( $strClass, $arrParams = array() )
  13. {
  14. if( !in_array( $strClass, self::$arrInstances ) )
  15. {
  16. if( class_exists( $strClass ) )
  17. {
  18. if( isset( $arrParams ) )
  19. {
  20. $strCall = 'self::$arrInstances['' . $strClass . ''] = new ' . $strClass . '( ';
  21. foreach( $arrParams as $param )
  22. {
  23. $strCall .= ''' . $param . '', ';
  24. }
  25. $strCall = substr( $strCall, 0, -);
  26. $strCall .= ' );';
  27. eval( $strCall );
  28. }
  29. else
  30. {
  31. self::$arrInstances[$strClass] = new $strClass();
  32. }
  33. }
  34. else
  35. {
  36. require_once( self::$strClassesDir . '/' . $strClass . '.class.php');
  37. self::$arrInstances[$strClass] = new $strClass;
  38. }
  39. }
  40. return self::GetInstance( $strClass );
  41. }
  42.  
  43. static public function GetInstance( $strClass )
  44. {
  45. if( isset( self::$arrInstances[ $strClass ] ) )
  46. {
  47. if( is_object( self::$arrInstances[ $strClass ] ) )
  48. {
  49. return self::$arrInstances[ $strClass ];
  50. }
  51. else
  52. {
  53. return false;
  54. }
  55. }
  56. else
  57. {
  58. return false;
  59. }
  60. }
  61.  
  62. static public function UnloadInstance( $strClass )
  63. {
  64. if( is_object( self::$arrInstances[ $strClass ] ) )
  65. {
  66. unset( self::$arrInstances[ $strClass ] );
  67. }
  68. else
  69. {
  70. return false;
  71. }
  72. }
  73.  
  74. }
  75.  
  76. ?>

Trochę ten kod pogmatfany, ale działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- gkeb   Singleton - O Co W Tym Biega?   14.08.2004, 21:56:40
- - Dabroz   A ja mam pytanie: czy naprawdę Google trzyma swoje...   14.08.2004, 22:40:44
- - gkeb   szukalem na google wiec nie miej pretensji. nie zn...   14.08.2004, 23:31:09
- - Dravo   Witaj Rada: poprzegladaj przykladowe kody z wykorz...   15.08.2004, 07:25:13
- - Dabroz   Cytat(gkeb @ 2004-08-15 00:31:09)szukalem na ...   15.08.2004, 11:18:21
- - gkeb   eee ten mi umknal sorki za zamieszanie   15.08.2004, 12:14:58
- - Yarecki   Cytat(Dravo @ 2004-08-15 08:25:13)A ja tylko ...   15.08.2004, 13:36:05
- - gkeb   Rozumiem juz istote dzialania Mam coś takiego: ...   21.08.2004, 11:00:33
- - Yarecki   Cytat(gkeb @ 2004-08-21 12:00:33)[PHP] pobier...   21.08.2004, 11:59:10
- - gkeb   Wg. tego co napisalem pare postów wyżej w każdej k...   22.08.2004, 09:58:50
- - Yarecki   Cytat(gkeb @ 2004-08-22 10:58:50)... Czy to j...   23.08.2004, 04:24:14
- - matid   Cytat(gkeb @ 2004-08-22 10:58:50)... Czy to j...   23.08.2004, 09:28:09
- - Yarecki   matid: to mozna rozwiazac np. tak: [PHP] pobierz,...   23.08.2004, 12:39:12
- - matid   Chyba się niezbyt jasno wyraziłem. Chodzi mi o to,...   23.08.2004, 14:59:43
- - hawk   Cytat(Yarecki @ 2004-08-23 04:24:14)Ja używam...   23.08.2004, 18:48:19
- - Yarecki   Cytat(hawk @ 2004-08-23 19:48:19)Po co używać...   23.08.2004, 21:33:20
- - gkeb   matid a jaki problem w tym ze do konstruktora prze...   23.08.2004, 21:48:51
- - matid   Cytat(gkeb @ 2004-08-23 22:48:51)matid a jaki...   24.08.2004, 12:10:33
- - hawk   Cytat(Yarecki @ 2004-08-23 21:33:20)Trochę po...   24.08.2004, 22:21:12
- - gkeb   Cytat... A w ogóle to singleton nie powinien mieć ...   24.08.2004, 22:33:09
- - matid   Cytat(hawk @ 2004-08-24 23:21:12)A w ogóle to...   25.08.2004, 09:44:26
- - hawk   Tylko że to już nie jest singleton... Idea podobna...   25.08.2004, 18:13:39


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: 6.10.2025 - 16:38