Sven Jacobs: PHP5 Klassenvariable

Beitrag lesen

jedesmal wenn ich ein Objekt von der Klasse DBM erstelle wird die Struktur unsinnigerweise neu ermittelt.

Das Stichwort lautet hier Singleton! Ein Singleton ist eine Klasse, von der nur eine Instanz existieren kann:

class DBM
{
   private $DBstruct = array();
   static private $instance = null;

protected function __construct()
   {
     $this->DBstruct = DB_Struct_ermitteln();
   }

// __clone nicht ausführbar machen
   final private function __clone() {};

public function DB_Struct_ermitteln()
   {
      return struktur_der_Datenbank;
   }

static public function singleton()
   {
      if ( is_null( self::$instance ) )
      {
         self::$instance = new DBM();
      }

return self::$instance;
   }
}

Eine Instanz erstellst Du so:

$dbm = DBM::singleton();

Wenn Du nun die statische Methode singleton() erneut aufrufst, wird nicht noch eine Instanz der Klasse erstellt, sondern es wird eine Referenz auf die vorhandene Instanz zurückgeliefert. Dadurch, dass der Konstruktor protected ist, kannst Du nicht direkt eine Instanz erstellen. Ein Objekt kann ebenfalls nicht geklont werden, da die __clone() Methode leer ist, private und als finale deklariert.

Das Sprachelement "var" solltest Du in PHP 5 übrigens nicht mehr verwenden.