Websiteentwicklung: PHP: OOP

Aus Wikibooks

Wechseln zu: Navigation, Suche
Websiteentwicklung PHPBild:Wikibooks buchseite.svg OOP


[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.

Zurück zu Referenzen | Hoch zu PHP | Vor zu Smarty
Persönliche Werkzeuge
Buch erstellen
  • Artikel hinzufügen
  • Hilfe zu Sammlungen