Читать книгу Programmieren mit PHP - Andreas Hitzig - Страница 9
Überschreiben von Werten
ОглавлениеEiner der Vorteile der objektorientierten Entwicklung ist die Vererbung von Methoden und Attributen. Richtig konfiguriert pflegen Sie diese nur einmalig in einem übergeordneten Element und nutzen sie anschließend durch Vererbung. In einigen Fällen ist es jedoch sinnvoll, die vorgegebenen Attribute oder Eigenschaften ganz oder teilweise zu ändern, damit die Aufgabe ohne zusätzliche Rahmenstrukturen gelöst werden kann. Sie definieren für diese Fälle die Methode in der Kindklasse noch einmal unter dem gleichen Namen, wie sie bereits in der übergeordneten Klasse existiert. Anschließend versehen Sie die neu definierte Methode mit den gewünschten Funktionalitäten:
class Auto {
private $gewartet;
private function autowartung ($wert){
$this -> gewartet = $wert;
}
public function rueckgabeWartung
($wert){
$this -> autopflege ($wert);
return $this -> gewartet;
}
}
class Familienauto extends Auto { ...
}
$touran = new Familienauto;
echo 'Porsche: <br>Folgende Wartung
wurde durchgeführt: ';
$durchgefuehrt = $touran ->
rueckgabeWartung('Bremsentausch');
echo $durchgefuehrt;
So weit zu den normalen Methoden der Klasse Auto und der Kindklasse Familienauto. Bei der Wartung wurden nur die wichtigste Wartung durchgeführt und die Bremsen getauscht. Etwas anders sieht es natürlich aus, wenn Sie einen Sportwagen besitzen. In der Inspektion soll jedes einzelne Teil haargenau überprüft werden und ausgetauscht werden. Dazu wird die Funktion autowartung aus der Klasse Auto erneut definiert und mit den notwendigen Zusätzen versehen:
public function mache_sichtbar() {
foreach($this as $key => $value) {
print $key.'-'.$value.'<br>';
}
}
Auch der Sportwagen basiert auf der Klasse Auto. Die Eigenschaft gewartet entspricht jedoch bei dieser Kindklasse nicht nur einem einzigen Wert, sondern einem Array, in dem die gewarteten Teile gespeichert werden. Die Funktion autowartung wird als private Funktion neu aufgesetzt und mit einer neuen Funktion überschrieben, die alle möglichen Teile des Autos ausgibt, die gewartet wurden.
Bei der Definition der zu überschreibenden Eigenschaften und Methoden sollten Sie die Sichtbarkeitsstufe im Auge behalten. Die Objekte, die Sie überschreiben möchten, müssen sich zumindest auf der gleichen Sichtbarkeitsstufe wie das Original befinden. Hätte die Variable $gewartet innerhalb der Klasse Auto die Stufe protected, könnten Sie innerhalb des Sportwagens dieser nicht als private deklarieren, da ansonsten die Sichtbarkeit in der Kindklasse geringer wäre als in der Elternklasse. Diese Voraussetzung gilt für Eigenschaften und Methoden.
PHP 5 bringt nicht nur neue Funktionalitäten mit sich, sondern auch eine Reihe von Aktualisierungen und Verbesserungen bei bereits Vorhandenem. Ein Beispiel dafür ist die Methodenverkettung, die zum Einsatz kommt, wenn Sie beispielsweise auf einem Objekt mehrere Methoden aufrufen. In der klassischen Programmierung setzen Sie vor jeden Methodennamen den Objektnamen. Dies kann bei mehreren Aufrufen des gleichen Objekts recht unübersichtlich werden. Für diesen Fall bietet Ihnen PHP 5 die Methodenverkettung an, die in der Literatur auch als Fluent Interfaces oder Method Chaining bezeichnet wird.
Im Beispiel in Listing 4 gibt es eine Klasse Probefahrt mit verschiedenen Methoden zur Reservierung der Fahrt, des Autos und weiterer sinnfreier Rahmenparameter. Beim klassischen Vorgehen würden Sie eine neue Variable, abgeleitet von der Klasse Probefahrt, erzeugen und die verschiedenen Werte an die Methoden übergeben Mit Hilfe der Methodenverkettung können Sie sich einiges an Tipparbeit sparen.
LISTING 4: FLUENT INTERFACES
class Probefahrt
{
private $reserviert;
private $strecke;
private $auto;
private $autohaendler;
public function
reserviereProbefahrt ($value)
{
$this -> reserviert = $value;
}
public function waehleHaender
($value)
{
$this -> autohaendler = $value;
}
public function waehleModell
($value)
{
$this -> auto = $value;
}
public function waehleStrecke
($value)
{
$this -> strecke = $value;
}
}