PHP4-Forum
Forum | Befehle | MySQL | Beispiele | Newsletter | Suche | Home

Untermenü

Erweitertes
Reguläre Ausdr.
MIME-Mail
PHP und WAP
Crontab
HTTP-Header
Klassen, Objekte

Zu dieser Seite

Klassen, Objekte
Klassen, Objekte

Auch PHP bietet die Möglichkeit objektorientiert zu Programmieren, also das Arbeiten mit Klassen und Objekten. Viele kennen dies bestimmt schon aus anderen Sprachen, für die anderen soll kurz erklärt werden, worum es dabei geht.

Ein Klasse ist programmier-technisch gesehen eine Gruppierung von Variablen und Funktionen. Daraus lassen sich einzelne Objekte erstellen. Ein Objekt stellt man sich am besten wie ein wirkliches Objekt (der Name ist nämlich nicht umsonst so gewählt) vor, z.B. ein Auto. Ein Auto hat nun viele verschiedene Eigenschaften (Variablen) und einige Funktionen, wie z.B. das Tanken oder Fahren. Die Funktionen und Variablen werden hierbei in einer Klasse definiert, zu vergleichen mit einem Auto-Modell. Man kann nun aus einer Klasse ein Objekt erstellen, also ein einzelnes Auto bauen. Davon können natürlich beliebig viele erstellt werden, die zunächst alle die gleichen Eigenschaften haben, aber später auch individuell werden können, indem sie ihre Eigenschaften seperat ändern.

Um in PHP eine solche Klasse zu erstellen, wird das Schlüsselwort CLASS verwendet, gefolgt von dem Klassennamen. Der eigentlich Klassen-Code ist in den dann folgenden geschweiften Klammern eingeschlossen. Variablen (die Eigenschaften des Modells) werden innerhalb der geschweiften Klammern nach dem Schlüsselwort VAR aufgezählt. Hier kann man der Variable gleich einen Wert zuweisen, oder vorerst leer lassen.

Um einer Klasse bestimmte Funktionen zuzuweisen, wird nach der Deklaration der Variablen eine Funktion erstellt, wie sie auch normal in PHP verwendet werden (siehe Grundlagen). Falls aus einer Funktion jedoch auf eine (der vorher definierten) Variable (also Eigenschaft) des Objektes zugegriffen werden soll, muss dies mit $this->variable geschehen.

Eine solche Klasse (für ein Auto-Modell) könnte also so aussehen:
class auto {
  var $tank = 0; // Tank ist leer
  var $verbrauch = 6; // 6 Liter Verbrauch pro 100km
  var $tank_size = 55; // 55 Liter passen in den Tank

  // Diese Funktion füllt den Tank auf, wobei beachtet wird,
  // dass nicht die Tank-Größe überschritten wird,
  // und gibt die tatsächlich getankten Liter zurück
  function tanke($liter) {
    if($this->tank + $liter > $this->tank_size)
      $liter = $this->tank_size - $this->tank;
    $this->tank += $liter;
    return $liter;
  }

  // Diese Funktion füllt den Tank und gibt die getankten Liter zurück
  function tanke_voll() {
    return $this->tanke($this->tank_size - $this->tank);
  }

  // Bewegt das Auto, wobei der Tank entsprechend geleert wird.
  // Jedoch wird auch hier beachtet, dass der Tank nicht negativ wird
  // und sie gibt die tatsächlich zurückgelegten KM zurück
  function fahre($km) {
    if($this->tank - ($km * $this->verbrauch / 100) < 0)
      $km = 100 * $this->tank / $this->verbrauch;
    $this->tank -= $km * $this->verbrauch / 100;
    return $km;
  }
}


Das Ganze sieht wahrschienlich komplizierter aus, als es ist. Denn hier wird nur mit ein paar mathematischen Formeln herumgespielt. Wenn man jedoch die einzelnen Teile seperat betrachtet, sollte es durchschaubar sein.

Die Klasse alleine bringt jedoch nicht viel, man muss erst ein Objekt erstellen, bevor man damit arbeiten kann. Hierfür wird mit Hilfe des Schlüsselwortes NEW in eine Variable ein neues Objekt aus der Klasse erstellt. Um jetzt auf die Variablen des Objektes zuzugreifen, wird das Schema $objekt_name->variable verwendet. Wird z.B. ein Objekt mit $benz = new auto; erstellt, so kann man z.B. mit $benz->verbrauch = 10; den Wert der Variable $verbrauch ändern. Hierzu ein Beispiel, um aus der obigen Beispiel-Klasse ein Objekt zu erstellen um anschließend die Funktionen aufzurufen und zwischendurch eine Status-Meldung auszugegeben.

class auto { /* Inhalt der Klasse siehe oben */ }

// Diese Funktion gibt einen Status der aktuellen
// Variablen-Werte des Objektes aus
function status($objekt) {
  echo "<i>Tank: ".$objekt->tank." | ";
  echo "Verbrauch: ".$objekt->verbrauch." | ";
  echo "Tank-Größe: ".$objekt->tank_size."</i><BR>";
}

$benz = new auto;
status($benz);
echo "Tanke voll: ".$benz->tanke_voll()." Liter<br>"; status($benz);
echo "Fahre 100km: ".$benz->fahre(100)." km<br>"; status($benz);
echo "Tanke 10 Liter: ".$benz->tanke(10)." Liter<br>"; status($benz);


Tank: 0 | Verbrauch: 6 | Tank-Größe: 55
Tanke voll: 55 Liter
Tank: 55 | Verbrauch: 6 | Tank-Größe: 55
Fahre 100km: 100 km
Tank: 49 | Verbrauch: 6 | Tank-Größe: 55
Tanke 10 Liter: 6 Liter
Tank: 55 | Verbrauch: 6 | Tank-Größe: 55


Hoffentlich ist die Funktionsweise von Klassen und Objekten wenigstens annähernd deutlich geworden. Für Fragen steht natürlich wie immer das Forum zur Verfügung.
Dienstleistungen | Werbung | Impressum | Sitemap | Kontakt | Email © 1999 - 2013 | Last Update: 30.01.2001