Generalnie wolę pisać zwykłe niestatyczne klasy i używać klasy fabrycznej do tworzenia instancji pojedynczych (sudo static) instancji obiektu.
W ten sposób konstruktor i destruktor działają normalnie i mogę tworzyć dodatkowe niestatyczne instancje, jeśli chcę (na przykład drugie połączenie DB)
Używam tego przez cały czas i jest to szczególnie przydatne do tworzenia niestandardowych programów obsługi sesji w bazie danych, ponieważ gdy strona kończy działanie, destruktor wypycha sesję do bazy danych.
Kolejną zaletą jest to, że możesz zignorować kolejność, którą nazywasz, ponieważ wszystko zostanie skonfigurowane na żądanie.
class Factory {
static function &getDB ($construct_params = null)
{
static $instance;
if( ! is_object($instance) )
{
include_once("clsDB.php");
$instance = new clsDB($construct_params); // constructor will be called
}
return $instance;
}
}
Klasa DB ...
class clsDB {
$regular_public_variables = "whatever";
function __construct($construct_params) {...}
function __destruct() {...}
function getvar() { return $this->regular_public_variables; }
}
Gdziekolwiek chcesz go używać, po prostu zadzwoń ...
$static_instance = &Factory::getDB($somekickoff);
Następnie potraktuj wszystkie metody jako niestatyczne (ponieważ są)
echo $static_instance->getvar();