Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wzorzec Singleton.
Forum PHP.pl > Forum > Przedszkole
cykcykacz
Witam,
zastanawiam się czy rozumiem wzorzec Singleton. Mamy taki kod:
Kod
class test {

   public $zmienna;

   public function __construct() {}
   public static function singleton()
   {
      static $instance;
      if(!isset($instance)) {
         $instance = new test;
      }
      return $instance;
   }
}

$single1 = test::singleton();
$single1->zmienna = 100;
echo $single1->zmienna;

$single2 = test::singleton();
echo $single2->zmienna;

$single3 = test::singleton();
echo $single3->zmienna;

Ten kod wyświetli na ekranie trzy raz 100.
W tym wzorcu chodzi o to aby tworzyć tylko jeden obiekt danej klasy i następnie mogę się odwoływać do niego przez funkcję statyczną kilku krotnie i otrzymam tą samą wartość?
Fifi209
Dokładnie o to chodzi. ;] Abyś mógł utworzyć tylko jeden obiekt dla klasy.
ActivePlayer
dodatkowo powiniennes konstruktor ustawic jako prywatny. wtedy uzycie gdziekolwiek w kodzie konstrukcji new test wyrzuci wyjątek.
Fifi209
Cytat(ActivePlayer @ 9.07.2011, 22:05:48 ) *
wyrzuci wyjątek.

Ciekawa teoria. ;] Raczej errora ale nie wyjątek.
user767
Możesz wrzucić errora do tablicy
  1. $errors[] = "Coś zrobiłem nie tak po drodze";


Wrzucić to


  1. if(count($errors)){
  2. print_r($errors);
  3. }
Fifi209
Bardzo w temacie widzę ;]
user767
i najlepiej sprawdzanie błędów php closedeyes.gif
ActivePlayer
Fifi masz racje. Wyrzuci blad a nie wyjatek. Co nie zmienia faktu ze ksiazkowy offtopic sie tu zrobil. Nie bede pokazywac palcem przez kogo;)
mortus
Cytat(Fifi209 @ 9.07.2011, 21:44:14 ) *
Dokładnie o to chodzi. ;] Abyś mógł utworzyć tylko jeden obiekt dla klasy.

Najczęściej, a właściwie prawie zawsze. Jednak nie tylko. Z założenia wzorca singleton możemy użyć do kontrolowania ilości wystąpień instancji danej klasy w systemie, co w praktyce oznacza, że możemy tworzyć więcej niż jeden obiekt klasy implementującej wzorzec singleton. Natomiast maksymalna liczba wystąpień instancji takiej klasy powinna być odgórnie ustalona i kontrolowana przez tę właśnie klasę. Poza tym klasa realizująca wzorzec singleton powinna umożliwiać nam swobodny dostęp do każdej z instancji, jaką tworzymy.

To tak gwoli uzupełnienia, żeby nie było, że singleton umożliwia nam stworzenie dokładnie jednej instancji danej klasy, choć prawie zawsze tak się go implementuje.
skowron-line
http://phpedia.pl/wiki/Singleton tu masz odpowiedz na swoje pyta(nie|nia).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.