Im Allgemeinen bevorzuge ich es, reguläre nicht statische Klassen zu schreiben und eine Factory-Klasse zu verwenden, um einzelne (sudostatische) Instanzen des Objekts zu instanziieren.
Auf diese Weise arbeiten Konstruktor und Destruktor wie gewohnt, und ich kann auf Wunsch zusätzliche nicht statische Instanzen erstellen (z. B. eine zweite DB-Verbindung).
Ich verwende dies die ganze Zeit und ist besonders nützlich, um benutzerdefinierte Sitzungshandler für DB-Speicher zu erstellen, da der Destruktor die Sitzung beim Beenden der Seite in die Datenbank überträgt.
Ein weiterer Vorteil ist, dass Sie die Reihenfolge, in der Sie Dinge aufrufen, ignorieren können, da alles bei Bedarf eingerichtet wird.
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;
}
}
Die DB-Klasse ...
class clsDB {
$regular_public_variables = "whatever";
function __construct($construct_params) {...}
function __destruct() {...}
function getvar() { return $this->regular_public_variables; }
}
Überall, wo Sie es verwenden möchten, rufen Sie einfach an ...
$static_instance = &Factory::getDB($somekickoff);
Dann behandeln Sie einfach alle Methoden als nicht statisch (weil sie es sind)
echo $static_instance->getvar();