Je préfère généralement écrire des classes non statiques régulières et utiliser une classe factory pour instancier des instances uniques (sudo static) de l'objet.
De cette façon, le constructeur et le destructeur fonctionnent comme d'habitude, et je peux créer des instances non statiques supplémentaires si je le souhaite (par exemple une deuxième connexion DB)
Je l'utilise tout le temps et est particulièrement utile pour créer des gestionnaires de session de magasin de base de données personnalisés, car lorsque la page se termine, le destructeur pousse la session vers la base de données.
Un autre avantage est que vous pouvez ignorer l'ordre dans lequel vous appelez les choses, car tout sera configuré à la demande.
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 classe DB ...
class clsDB {
$regular_public_variables = "whatever";
function __construct($construct_params) {...}
function __destruct() {...}
function getvar() { return $this->regular_public_variables; }
}
Partout où vous voulez l'utiliser, appelez simplement ...
$static_instance = &Factory::getDB($somekickoff);
Ensuite, traitez simplement toutes les méthodes comme non statiques (car elles le sont)
echo $static_instance->getvar();