Websiteentwicklung: PHP: OOP
Aus Wikibooks
[Bearbeiten] Was ist OOP?
OOP bedeutet Objektorientiertes Programmieren, was aber wohl noch nicht den gewünschten "Aha"-Effekt hervorrufen sollte. Was ist also ein Objekt?
Nehmen wir unseren Freund, den Baum: Bäume sehen in der Regel alle gleich aus: Sie sind groß, grün und werfen Schatten. Einige davon sind nicht mehr allzu gesund, andere sind so arrogant und wollen unterschieden haben, ob sie Eiche, Esche oder Kastanie sind. Nun wissen wir aus der Fantasy-Literatur (z.B. T. A. Barron oder J.R.R Tolkien), dass es möglich ist mit Bäumen zu kommunizieren (und sie zu fragen, ob sie nun Eiche, Esche, Kastanie; groß, klein, gesund oder tot sind; wie sie heißen). Gehen wir von einem Helden Foo aus, der mit dem Baum Bar kommuniziert. Formal heißt das, dass Foo eine Instanz der Klasse "Held" ist, und Bar eine Instanz der Klasse "Baum". Aber irgendwie können die beiden noch nicht wirklich viel tun, was fehlt, sind Methoden. Fragt Foo also Bar nach seinem Wohlbefinden, muss Bar eben zurückliefern, wie gesund er ist:
<?php class Baum { var $gesundheit; // bei 0 ist unser Baum ein Tisch var $hoehe; // ein kleiner Baum function sage_mir_dein_wohlbefinden() { if ( $this->gesundheit > 80 ) return 'Mir geht es super.'; if ( $this->gesundheit > 40 ) return 'Ich hatte schon bessere Tage'; if ( $this->gesundheit > 0 ) return 'Mir geht es echt mies.'; return 'Ich bin ein Tisch.'; /* tritt nur ein wenn $this->gesundheit * kleiner oder gleich 0 ist. */ } function wie_hoch_bist_du() { return 'Ich bin ' . $this->getHoehe() . ' Meter hoch.'; } function wachse($summand) { $this->setHoehe($this->getHoehe() + $summand); /* eigentlich müsste man überprüfen, ob * $summand es überhaupt wert ist, addiert * zu werden, also ob er ein Zahlwert ist, * oder nicht. Für den Moment soll uns aber * dieser kurze Code genügen.*/ } function setGesundheit($neueGesundheit) { $this->gesundheit = $neueGesundheit; } function getHoehe() { return $this->hoehe; } function setHoehe($neueHoehe) { $this->hoehe = $neueHoehe; } } // Ende von Klasse Baum $Bar = new Baum(); $Bar->setGesundheit(75); $Bar->wachse(5); echo $Bar->wie_hoch_bist_du() . ' '; $Bar->wachse(10); echo $Bar->sage_mir_dein_wohlbefinden() . ' ' . $Bar->wie_hoch_bist_du(); ?>
Man sollte bemerken, dass jeder Zugriff auf Eigenschaften nur durch Methoden erfolgt. Man könnte sie zwar auch von außen ändern, aber das tut man einfach nicht. $this->xyz bedeutet übrigens, dass man auf die für das gerade genutzte Objekt spezifische Variable xyz zugreift.
[Bearbeiten] Der Baum kann sprechen
Der Code eben ist natürlich bei weitem noch nicht vollständig, man müsste noch eine Methode zum Aufnehmen von Regen etc. hinzufügen; auch bleibt unser Baum, so wie er jetzt ist, ewiglich gesund. Da unser Held Foo aber alle Bäume in einem winzigen Wald befragen möchte, brauchen wir noch einige andere Bäume. Auch sollten nicht alle gleich ganz gesund sein.
[Bearbeiten] Der Konstruktor
Ein Konstruktor ist die Funktion, die beim Erzeugen eines Objekts aufgerufen wird. In PHP5 heißt sie phantasievoll __construct(), in PHP4 wird einfach der Name der Klasse dazu verwendet. Also:
<?php class Baum { var $gesundheit; // bei 0 ist unser Baum ein Tisch var $hoehe; // ein kleiner Baum function Baum($gesundheit = 100, $hoehe = 0) { $this->gesundheit = $gesundheit; $this->setHoehe($hoehe); } function sage_mir_dein_wohlbefinden() { if ( $this->gesundheit > 80 ) return 'Mir geht es super.'; if ( $this->gesundheit > 40 ) return 'Ich hatte schon bessere Tage'; if ( $this->gesundheit > 0 ) return 'Mir geht es echt mies.'; return 'Ich bin ein Tisch.'; /* tritt nur ein wenn $this->gesundheit * kleiner oder gleich 0 ist. */ } function wie_hoch_bist_du() { return 'Ich bin ' . $this->getHoehe() . ' Meter hoch.'; } function wachse($summand) { $this->setHoehe($this->getHoehe() + $summand); /* eigentlich müsste man überprüfen, ob * $summand es überhaupt wert ist, addiert * zu werden, also ob er ein Zahlwert ist, * oder nicht. Für den Moment soll uns aber * dieser kurze Code genügen.*/ } function setGesundheit($neueGesundheit) { $this->gesundheit = $neueGesundheit; } function getHoehe() { return $this->hoehe; } function setHoehe($neueHoehe) { $this->hoehe = $neueHoehe; } } //- Ende von Klasse Baum echo 'Bar:'; $Bar = new Baum(100,0); $Bar->wachse(5); echo $Bar->wie_hoch_bist_du() . ' '; $Bar->wachse(10); echo $Bar->sage_mir_dein_wohlbefinden() . ' ' . $Bar->wie_hoch_bist_du(); echo "\nBor:"; $Bor = new Baum(10,24); echo $Bor->sage_mir_dein_wohlbefinden() . ' ' . $Bor->wie_hoch_bist_du(); echo "\nBer:"; $Ber = new Baum(0,1); echo $Ber->sage_mir_dein_wohlbefinden() . ' ' . $Ber->wie_hoch_bist_du(); ?>
Foo hat also zwei Bäume und einen Tisch interviewt.

