Hauptmenü

Untermenü

OOP mit PHP5 - Praxistutorial 1 - Konstruktor der Db_Request-Klasse

1. Die Abschnitte

2. Ein Hinweis

Wie ich im vorherigen Abschnitt schon sagte, werden wir diesmal die Klasse Db nicht vererben. Also nichts mit class Db_Request extends Db. Ach ja, noch etwas. Im schon erwähnten Projekt gab es noch eine spezielle Fehlerbehandlungsklasse, die ich hier weg lasse, da es den Rahmen sprengen würde. Darum wird auch in dieser Klasse die Sichtbarkeit aller Methoden auf public gesetzt.

3. Der Konstruktor


class Db_Request 
{
  private $db      false;
  public  $message = array();
  
  public function __construct()
  {
    try 
    {
      $this -> db = new Db;
    } 
    catch (Db_Exception $e) 
    {
      $this -> message['status'] = 'failed';
      $this -> message['message'] = 'Db Connection Error:'.
                                     $e -> getMessage();
    } 
  }
}

Erläuterung

Zunächst mal erzeugen wir im Konstruktor ein Objekt aus der Klasse Db ($this -> db = new Db;). Das legen wir in der privaten Eigenschaft $db fest. Somit hat man hier einen direkten Zugriff auf alle Methoden und öffentlichen Eigenschaften dieser Klasse. Und da der Zugang die Abarbeitungsdatei oop_4.php nicht zu interessieren hat, legen wir die Sichtbarkeit auf private.

Da wir das in einem try-Block machen, können wir im catch-Abschnitt mögliche Fehlermeldungen abfangen. Dazu wird die entsprechende Exception per $e -> getMessage() in die "Array"-Eigenschaft $message geschrieben.

4. Die Sache mit den Konstruktoren

Bisher habe ich euch mehrmals darauf hingewiesen, dass der Konstruktor der Elternklasse nur unter zwei Bedingungen ausgelöst wird. Erstens, wenn die "Kindklasse" oder eine andere eingebundene Klasse über keinen verfügt, oder im eigenen Konstruktor eine parent::__construct-Anweisung hat.

In diesem Fall ist es anders. Da wir nicht mit Vererbung sondern einem eigenen Objekt arbeiten, wird der Konstruktor der Klasse Db automatisch ausgelöst, wenn das Objekt mittels $this -> db = new Db; erzeugt wird. Das gilt in diesem Fall auch für den Destruktor. Da der in der Db-Klasse als Sichtbarkeit ein public hat, so kann der auch durch ein weiteres "Oberobjekt" gestartet werden. Und das zeige ich euch nun.

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