ralf: PHP - Objektorientiert

Beitrag lesen

Hi,

na was soll ich sagen, oo muss in deinem kopf passieren. Wenn man bisher "spagetti"-Code produziert hat, fällt einem das besonder schwer (Hab das auch schon mitgemacht)

Ich probier die hier n beispiel zu geben:

Wir haben eine Klasse Auto:

class Auto {
  // Eigenschaften
  var $curSpeed;
  var $maxSpeed;

// Konstruktor
  function Auto ($maxSpeed) {
    $this->curSpeed=0;
    $this->maxSpeed=$maxSpeed;
  }
}

Als erstes haben wir der Klasse Eigenschaften zugefügt (Das Auto hat eine maximale und aktuelle Geschwindigkeit)
Der Konstruktor ist die Methode die genauso heisst wie die Klasse. Der Konstruktor wird automatisch beim erzeugen eines Objektes (das kommt später) aufgerufen um die Klasse mit Startwerten zu versorgen.

Fügen wir nun neue Methoden hinzu:

class Auto {
  [...]
  function accelerate () {
    if($this->curSpeed<$this->maxSpeed) {
      $this->curSpeed+=1;
    } else {
      $this->curSpeed=$this->maxSpeed;
    }
  }
  function decelerate () {
    if($this->curSpeed>0) {
      $this->curSpeed-=1;
    } else {
      $this->curSpeed=0;
    }
  }
}

Hier haben wir nun Methoden hinzugefügt welche die Geschwindigkeit des Autos erhöhen bzw. drosseln. Die Kontrollstrukturen innerhalb der Methode erklären sich von selbst denke ich.

Um nun fahren zu können müssen wir ein neue Objekt erzeugen:

$car=new Auto(250);
Das erzeugt ein neues Objekt ($car) aus der Klasse Auto, wobei das Auto eine maximale Geschwindigkeit von 250 hat, dies setzt der Konstruktor.

Kommen wir zur Vererbung:

class Auto2 extends Auto {
  // Konstruktor
  function Auto2($maxSpeed) {
    parent::Auto($maxSpeed);
  }
  function GetCurSpeed() {
    return $this->curSpeed;
  }
  function GetMaxSpeed() {
    return $this->maxSpeed;
  }
}

Mit extends Vererben wir der Klasse Auto2 alle Eigenschaften und Methoden der Klasse Auto, d.h. Auto2 kann und hat genau das was Auto auch hat.
Der aufruf parent::Auto($maxspeed) ruft der Konstruktor der Elternklasse auf. Dies alles nennt man Polymorphismus. Die neuen Funktionen geben nun die Daten der alten Klasse Auto zurück:

$car=new Auto2(250); // neues Objekt
for ($i=1; $i==100; $i++) {
  $car->accelerate();   // Funktion accelerate wird 100 mal aufgerufen (FUNKTION AUS ALTER KLASSE)
}
echo $car->GetCurSpeed(); // Wird 100 zurückgeben, da das Auto auf 1000 beschleunigt wurde (FUNKTION AUS 2. KLASSE)

Ich hoffe das hilft Dir weiter

Gruß

Ralf