Wersja dla PHP5:
Kod:
<?php
class Database
{
private static $oInstance = false;
private function __construct ( )
{
}
public static function getinstance ( )
{
if ( self::$oInstance == false )
{
self::$oInstance = new Database( );
}
return self::$oInstance;
}
}
?>
Wersja dla PHP4:
Kod:
<?php
class Database
{
function Database ( )
{
}
function &getinstance ( )
{
static $oInstance = false;
if ( self::$oInstance == false )
{
self::$oInstance = new Database ( );
}
return self::$oInstance;
}
}
?>
Jak to działa?
Singleton pozwala zredukować ilość tworzonych instancji dla danej klasy, w tym wypadku "Database", do jednej, ponieważ została napisana metoda, która tworzy instancje klasy tylko raz, jeśli instancja klasy "Database" juz istnieje, jest zwracany jej obiekt, a nie jest tworzona nowa, druga instancja.
Co nam to da?
Napewno wzrost wydajniosci i spadek pamięci używanej przez skrypt, co za tym idzie, skrypt staje się szybszy i wydajniejszy.
Obiekt klasy jest dostępny wszędzie, bez potrzeby używania tablic superglobalnych ( $GLOBALS[] ).
Uzywanie:
Samo napisanie metody singleton-u nie wystarczy. Po napisaniu ów metody zmienia się sposób tworzenia instancji klasy.
Zamiast:
Kod:
<?php
//Tutaj definicja klasy...
$database = new database ( );
?>
Instancje tworzy się w ten sposób:
Kod:
<?php
//Tutaj definicja klasy...
$database =& Database::getinstance ( );
?>
Gdzie:
"Database" - to nazwa klasy.
"getinstance" - to nazwa metody z wzorcem singleton.
W PHP5 zamiast "=&" mozna dać samo "=".
Mam nadzieje, ze dobrze to wytłumaczyłem i, że zrozumiecie o co w tym chodzi ;)