Hauptmenü

Untermenü

OOP mit PHP5 - Praxistutorial 1 - Konstruktor und Destruktor der Db-Klasse

1. Die Abschnitte

2. Die Klasse Db

Diesmal gehen wir ein wenig anders vor. Wie ich schon sagte, ist das hier auch noch nicht optimal, aber dazu komme ich später bei den Design Patterns und PDO. Also zunächst mal werden die Zugangsdaten hart verdrahtet. Was es mit $connection und $resource auf sich hat, erkläre ich peu à peu.


class Db
{ 
  private $connection;
  public  $resource;
  private $host        'localhost';
  private $user        'root';
  private $password    '';
  private $database    'php_oop';
}

3. Der Konstruktor

Im Gegensatz zum dritten Einstiegstutorial wollen wir die Klasse Db diesmal nicht an eine andere weiter vererben. Das hat natürlich seine Vor- und Nachteile. Aber man sollte die Abhängigkeiten so gering wie möglich halten. Und da eine Datenbankklasse etwas sehr Allgemeines ist, sollte man hier noch nicht mit der Vererbung anfangen. Denn sonst wird das zu kompliziert und man verliert schnell den Überblick. Ist zumindest meine Meinung. Darum werden auch alle Methoden dieser Klasse als public deklariert! Details dazu folgen in der Zusammenfassung.


class Db
{ 
  ...
  public function __construct () 
  {   
    $this -> connection mysql_connect ($this -> host, 
                          $this -> user$this -> password);
    if (is_resource ($this -> connection)) 
    {
      mysql_select_db ($this -> database);
      if (mysql_error())
      {
        throw new Db_Exception ('Select Db:'.mysql_error());        
      }
    }
    else
    {        
      throw new Db_Exception ('Db->__construct():'.mysql_error());
    }      
  }
}

Erläuterung

Mit mysql_connect ($this -> host, $this -> user, $this -> password); bauen wir eine Verbindung zum MySQL-Server auf. Wenn das geklappt hat, so liegt die Ressourcenkennung in der Eigenschaft $this -> connection. Und jetzt werdet ihr auch verstehen, warum wir das Error Reporting herunter geschraubt haben. Denn wenn die Verbindung nicht zu Stande kommt, so wird ein Warning ausgegeben.

Dann prüfen wir (if (is_resource ($this -> connection))), ob es sich tatsächlich um eine Ressource handelt. Wenn dem nicht so ist, so werfen wir eine Ausnahme mit throw new Db_Exception ("Db->__construct():".mysql_error());.

Ansonsten wählen wir die entsprechende Datenbank aus (mysql_select_db ($this -> database);) und schauen nach, ob sie uns eine Fehlermeldung zurückliefert. Wenn wir da wieder Mist gebaut haben, so werfen wir erneut eine Meldung mittels if (mysql_error()).

Für die Merkbefreiten

Wenn die Verbindung zu einem MySQL-Server fehlschlägt, so gibt PHP ein Warning aus. Wenn man dagegen "nur" eine nicht existierende Datenbank auswählt, so kann man den Fehler nur über mysql_error() abfangen. Capice!

4. Der Destruktor

Also dazu sage ich jetzt nichts mehr.


public function __destruct () 
{
  if (is_resource ($this -> connection)) 
  {
    mysql_close ($this -> connection);
  }
}

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt