Geralmente, prefiro escrever classes não estáticas regulares e usar uma classe de fábrica para instanciar instâncias únicas (sudo static) do objeto.
Dessa forma, o construtor e o destruidor funcionam normalmente, e eu posso criar instâncias não estáticas adicionais, se desejar (por exemplo, uma segunda conexão com o banco de dados)
Eu uso isso o tempo todo e é especialmente útil para criar manipuladores de sessão personalizados do repositório de banco de dados, pois quando a página termina, o destruidor envia a sessão ao banco de dados.
Outra vantagem é que você pode ignorar a ordem em que chama as coisas, pois tudo será configurado sob demanda.
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;
}
}
A classe DB ...
class clsDB {
$regular_public_variables = "whatever";
function __construct($construct_params) {...}
function __destruct() {...}
function getvar() { return $this->regular_public_variables; }
}
Em qualquer lugar que você quiser usá-lo, basta ligar para ...
$static_instance = &Factory::getDB($somekickoff);
Em seguida, trate todos os métodos como não estáticos (porque são)
echo $static_instance->getvar();