Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Singleton a klasa "statyczna"
menic
post
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 0
Dołączył: 14.06.2003
Skąd: Tomaszów Lubelski/Rzeszów

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


Mogłby ktoś wytłumaczyć, jaka jest własciwie róznica pomiędzy wzorcem Singleton a tym, ze w klasie mamy wszystkie metody statyczne? Bo jakoś nie moge dojśc co i kiedy stosowac. Wg mnie to nie ma w tym wiekszej różnicy. A co wy sądzicie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Athlan
post
Post #2





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Na podstawie wzorca singletorn można stwożyć klasę rejestru, czyli zbiór konkretnych instancji klasy. Zazwyczaj złużą temu dwie metody:
Register() - rejestruje instancje klas
Registry() - wywołuje instancje klas z biblioteki singletonów

Singletony przechowywane są jako tablica w prywatnym statycznym atrybucie, jakoże w.w metody również są statyczne.

Trochę kodu wyciągniętego z mojego FW...

  1. <?php
  2.  
  3. final class Vframe
  4. {
  5. // ...
  6.  
  7. /**
  8.  * Object registry provides storage for shared objects
  9.  * @var array
  10.  */
  11. private static $_aRegistry = array();
  12.  
  13. // ...
  14.  
  15. /**
  16.  * Register a object as specified name
  17.  * If $sRegistryName is NULL, than name of registry will be name of declared cla
    ss
  18.  * 
  19.  * @see: registry()
  20.  * @throws: VframeException
  21.  * @param $oInstance  object : object witch will be push into registry array
  22.  * @param $sRegistryName string : name as registry object
  23.  * @access: public
  24.  * @return: void
  25.  */
  26. public static function register($oInstance, $sRegistryName = NULL)
  27. {
  28. if(!is_object($oInstance))
  29. throw new VframeException('Only objects may be stored in the registry!');
  30.  
  31. if($sRegistryName === NULL)
  32. $sRegistryName = get_class($oInstance);
  33.  
  34. if(!is_string($sRegistryName))
  35. throw new VframeException('Second parametr $sRegistryName must be a string!');
  36.  
  37. if(isset(self::$_aRegistry[$sRegistryName]))
  38. throw new VframeException('Registry "'.$sRegistryName.'" arleady exists! Did you mean to call registry()?');
  39.  
  40. self::$_aRegistry[$sRegistryName] = $oInstance;
  41. }
  42.  
  43. /**
  44.  * Get a single instance (singleton) from registry
  45.  * If $sInstanceName is NULL, than will be returned
  46.  * array of registereg objects
  47.  * 
  48.  * @see: register()
  49.  * @throws: VframeException
  50.  * @param $sInstanceName string : key of registry, witch will be return
  51.  * @access: public
  52.  * @return: object
  53.  */
  54. public static function registry($sInstanceName = NULL)
  55. {
  56. if($sInstanceName === NULL)
  57. {
  58. $sRegistryMap = array();
  59.  
  60. foreach(self::$_aRegistry as $sRegistryName => $oRegistryObject)
  61. {
  62. $sRegistryMap[$sRegistryName] = get_class($oRegistryObject);
  63. }
  64.  
  65. return $sRegistryMap;
  66. }
  67.  
  68. if(!is_string($sInstanceName))
  69. throw new VframeException('Param $sInstanceName must be a string!');
  70.  
  71. if(isset(self::$_aRegistry[$sRegistryName]))
  72. throw new VframeException('No object named as "$sInstanceName", use register() to insert it!');
  73.  
  74. return self::$_aRegistry[$sInstanceName];
  75. }
  76.  
  77. // ...
  78. }
  79.  
  80. ?>
Go to the top of the page
+Quote Post

Posty w temacie
- menic   Singleton a klasa "statyczna"   23.12.2006, 22:55:17
- - Denver   Różnica jest, i to bardzo wyraźna. Singleton to w...   24.12.2006, 00:08:40
- - hwao   Klasa statyczna posiada statyczne metody, generaln...   24.12.2006, 00:15:31
- - LBO   Dodam do wypowiedzi @hwao, że wzorzec singletona j...   24.12.2006, 00:52:25
- - menic   Z teoretycznego punktu widzenia rozumiem. Gorzej z...   25.12.2006, 14:02:51
- - hwao   Hm patrz [PHP] pobierz, plaintext <?php...   25.12.2006, 14:40:00
- - menic   Rozumiem Ale chodzi mi o róznice w zastosowaniu s...   25.12.2006, 14:53:58
- - Cysiaczek   Odpowiedź jest niezwykle prosta - od potrzeb : ) ...   25.12.2006, 16:00:54
- - cadavre   Jednak gdy np. połączenia z bazą, w klasie która o...   25.12.2006, 17:57:15
- - Cysiaczek   @cadavre - a singletonem niby tak? Połączenie jest...   25.12.2006, 18:04:19
- - cadavre   Tak - jak najbardziej jest jak mówisz. Ale porównu...   25.12.2006, 18:38:32
- - menic   Czyli tak jak sie domyślałem. Ten singleton to tak...   25.12.2006, 20:08:54
- - cadavre   Ja też nie widzę sensu w singletonie. Jeśli zdefin...   25.12.2006, 20:35:45
- - y3ti   Zgadza się, ale Twój obiekt $db jest zmienną ...   25.12.2006, 20:52:44
- - cadavre   O właśnie y3ti zauważyłem błąd w swoim poście. Kla...   25.12.2006, 20:56:44
- - y3ti   Masz rację, ale dzięki singleton możesz stworzyć t...   25.12.2006, 21:16:42
- - cadavre   Cytatphp 5 introduces the final keyword, which pre...   25.12.2006, 23:00:28
- - y3ti   brrr zagalopowałem się z tymi klasami finalnymi ...   25.12.2006, 23:20:34
- - cadavre   Swoją drogą final'e stosuje się raczej w końco...   26.12.2006, 00:25:38
- - Denver   Wydaje mi się, że siłą rzeczy klasa zawierająca sa...   26.12.2006, 10:28:10
- - y3ti   Pokombinowałem troszkę i... 1. Klasa statyczna ni...   26.12.2006, 12:34:23
|- - J4r0d   Cytat(y3ti @ 26.12.2006, 12:34:23 ) P...   26.12.2006, 13:45:06
- - hwao   y3ti tłumaczy wam absurd jaki przedstawiliście, mi...   26.12.2006, 15:00:21
- - menic   Skoro nie widze róznicy to niech ktoś przedstawi r...   26.12.2006, 15:32:18
- - cadavre   I jeśli CytatJest to jeden z najpopularniejszych w...   26.12.2006, 17:50:39
- - y3ti   Załóżmy, że mamy klasę DB służącą do obsługi bazy ...   26.12.2006, 17:53:03
- - menic   Ok to takie pytanie. Do czego sie najbardziej przy...   29.12.2006, 12:00:20
- - y3ti   Np. jako wzorzec fabryki [PHP] pobierz, plaintext...   29.12.2006, 12:23:06
- - hwao   http://webcity.pl/webcity/artykuly.php/t/62   30.12.2006, 12:55:24
- - dr_bonzo   'Klasa statyczna' od Singletona rozni sie ...   30.12.2006, 14:18:17
- - Athlan   Na podstawie wzorca singletorn można stwożyć klasę...   17.01.2007, 07:49:10


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: 5.10.2025 - 09:06