de.comp.lang.php FAQ

10.4. Was ist extends? Was ist Vererbung?

Antwort von Kristian Köhntopp

Häufig braucht man eine Klasse, die sich genauso verhält wie eine Klasse, die man schon hat, aber mit ganz kleinen Änderungen. Mit Hilfe des Schlüsselworts extends kann man sich eine Klasse definieren, die genauso ist wie eine bereits existierende Klasse und braucht dann nur noch das zu notieren, was anders ist.

Die Änderungen können dabei eine bestehende Klasse erweitern, also neue Variablen und Funktionen zu einer Klasse hinzufügen oder bestehende Variablen und Funktionen einer Klasse ersetzen.

Der folgende Beispiel-Code definiert eine Klasse Example_SQL, die sich ganz genauso verhält wie die Klasse DB_Sql in PHPLIB. Die Variablen $Host, $User, $Password und $Database sind jedoch anders belegt als in der originalen Klasse: Wir setzen dort einfach die Informationen ein, die notwendig sind, um unsere Datenbank zu kontaktieren. Außerdem ist die Funktion haltmsg() ersetzt. Die Klasse ruft diese Funktion auf, wenn ein Fehler aufgetreten ist. Wir ersetzen diese Funktion durch eine eigene Version, sodass wir Fehlermeldungen mit den Informationen drucken können, die der Anwender benötigt.

class Example_Sql extends DB_Sql {
  var $Host     = "database.netuse.de";
  var $User     = "kris";
  var $Password = "xyzzy";
  var $Database = "example_database";

  function haltmsg($msg) {
?>
    Es ist ein Datenbankfehler aufgetreten. Die Bearbeitung
    Ihrer Eingaben wurde abgebrochen. Bitte informieren Sie
    <a href="mailto:webmaster@example.kunde.de">den Webmaster</a>
    von diesem Problem.<p>

<?php
    printf("Die Fehlermeldung der Datenbank war: %s\n", $msg);
  }
}

Man kann die Klasse Example_SQL nicht verstehen, ohne die originale Klasse DB_SQL zu kennen. Die Klasse Example_SQL hat alle Eigenschaften und Funktionen, die DB_SQL auch hat. Erzeugt man also ein $db = new Example_SQL, dann kann man $db->query(...), $db->next_record() und so weiter aufrufen, als ob man es mit einer Klasse DB_SQL zu tun hätte.

Die Klasse zeigt nur in folgenden Punkten abweichendes Verhalten: Sie druckt ihre Fehlermeldungen in deutsch und enthält anwendungsspezifische Kontaktinformationen und sie kontaktiert anders als die Originalklasse defaultmäßig die Datenbank example_database auf dem Host database.netuse.de mit dem angegebenen Usernamen und Passwort.

hosted by
schlund + partner

Valid HTML 4.01! Valid CSS!

10.4. Was ist extends? Was ist Vererbung?
http://www.dclp-faq.de/q/q-klassen-vererbung.html
de.comp.lang.php FAQ | (c) Copyright 2000-2003 Das dclp-FAQ-Team