Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jedna instancja klasy zamiast wielu - singleton
Joachim Peters
post
Post #1





Grupa: Zarejestrowani
Postów: 196
Pomógł: 2
Dołączył: 1.03.2006

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


Witam,

Zastanawiam się czy da się jakoś inaczej stosować singleton niż tak:
  1. <?php
  2. $db = DB::getInstance();
  3. $user = User::getInstance();
  4. $session = Session::getInstance();
  5. ?>

Czy jest jakiś krótszy sposób? Jak robicie to u siebie, referencję? Bo to jest trochę męczące, żeby dodawać ten kod w każdej metodzie.

Pozdrawiam

Ten post edytował Joachim Peters 28.07.2007, 15:03:11
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
qoob
post
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 27.06.2007

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


ja mam ten sam problem i teraz wymyslilem cos takiego:
  1. <?php
  2. class GetClass {
  3. private $class = array();
  4.  
  5. static public $oInstance = false;
  6. public static function gi() {
  7.  
  8. if( self::$oInstance == false ) {
  9. self::$oInstance = new GetClass;
  10. };
  11.  
  12. return self::$oInstance;
  13.  
  14. }
  15.  
  16.  
  17. public function createObj($obj,$name = FALSE) {
  18.  
  19. if(!$name) {
  20. $name = $obj;
  21. }
  22.  
  23. $name = strtolower($name);
  24. $this->class[$name] = new $obj;
  25.  
  26.  
  27. }
  28.  
  29.  
  30. public function addObj($refToObj,$name = FALSE) {
  31.  
  32. if(!$name) {
  33. $name = get_class( $refToObj );
  34. }
  35.  
  36. $name = strtolower($name);
  37.  
  38. $this->class[$name] = $refToObj;
  39. }
  40.  
  41.  
  42. public function __get($objName) {
  43.  
  44. return $this->class[ strtolower($objName) ];
  45. }
  46.  
  47. }
  48.  
  49.  
  50.  
  51.  
  52. class Q {
  53. public $text;
  54. }
  55.  
  56.  
  57. $gc = GetClass::gi();
  58.  
  59. $gc->createObj('Q');
  60. $gc->q->text = 'hello hello';
  61. echo $gc->q->text;
  62.  
  63.  
  64. ?>



wtedy tylko jedna klasa jest singielem a reszta juz nie musi byc. nie wiem czy to dobry sposob, bo jak by nie patrzec zawsze jeden antywzorzec zostaje, ale plusem jest to ze we wszystkich innych klasach ktore powinny miec tylko jeden obiekt mozna pominac statyczny fragnent kodu.
pozdrawiam

Ten post edytował qoob 29.07.2007, 13:54:04
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 14:58