Generalmente prefiero escribir clases regulares no estáticas y usar una clase de fábrica para crear instancias individuales (sudo estáticas) del objeto.
De esta forma, el constructor y el destructor funcionan de manera normal, y puedo crear instancias no estáticas adicionales si lo deseo (por ejemplo, una segunda conexión de base de datos)
Lo uso todo el tiempo y es especialmente útil para crear controladores de sesión de almacenamiento de base de datos personalizados, ya que cuando la página termina, el destructor empujará la sesión a la base de datos.
Otra ventaja es que puede ignorar el orden en que llama a las cosas, ya que todo se configurará a pedido.
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;
}
}
La clase DB ...
class clsDB {
$regular_public_variables = "whatever";
function __construct($construct_params) {...}
function __destruct() {...}
function getvar() { return $this->regular_public_variables; }
}
En cualquier lugar que desee usar, simplemente llame ...
$static_instance = &Factory::getDB($somekickoff);
Luego, trate todos los métodos como no estáticos (porque lo son)
echo $static_instance->getvar();