SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=259&group=44
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Praxis – Lebewesen


Hier ein abschließendes Beispiel zu den OOP-Erweiterungen, damit Sie sich ein Bild davon machen können, welch schöpferischer Akt sich im Einsatz objektorientierter Programmierung verbirgt.

<?php

// Schnittstelle
// Gewährleistet die Kommunikation zwischen Klassen
interface Wachstum {
  // Zu implementierende Methode
  function altern();
}

// Abstraktion einer Klasse
abstract class Lebewesen implements Wachstum {
  // Eigenschaften schützen, sodass über ein
  // Objekt kein direkter Zugriff möglich ist!
  protected $alter = 0;
  protected $geschlecht;

  public function altern(){}

  public final function getAlter() {
    return $this->alter;
  }
}

// Klasse Mensch wird durch die Superklasse
// Lebewesen erweitert (Vererbung)
class Mensch extends Lebewesen {
  protected static $vorfahre = "Affe";
  protected $name;
  
  // Konstruktor
  public function __construct($name, $geschlecht) {
    $this->name = $name;
    $this->geschlecht = $geschlecht;
    $this->altern();
  }
  
  // Destruktor
  public function __destruct() {
    echo "<br>...und so scheidet ".$this->name." dahin";
  }
  
  // Finale Methoden
  public final function altern() {
    $this->alter++;
  }
  
  public final function getName() {
    return $this->name;
  }
  
  public function umbenennen($neuerName) {
    $this->name = $neuerName;
  }
  
  public function geburtstagFeiern() {
    $this->altern();
    echo "trööööt";
  }
  
  // Statische Methoden
  public static final function neueEvolutionstheorie($neuerVorfahre) {
    Mensch::$vorfahre = $neuerVorfahre;
  }
  
  public static final function getVorfahre() {
    return Mensch::$vorfahre;
  }
}

// Klasse Deutscher erbt von Mensch
class Deutscher extends Mensch {
  public function __construct($name, $geschlecht) {
    parent::__construct($name, $geschlecht);
  }
  
  public function umbenennen($neuerName, $geduldsfaden=false) {
    $erfolg = $this->behoerdengang($geduldsfaden);
    if ($erfolg) $this->name = $neuerName;
  }

  // Private Methode
  private function behoerdengang($geduldsfaden) {
    try {
     if (!$geduldsfaden)
      throw new Exception("Umbennenung fehlgeschlagen!");
      return true;
    } catch (Exception $prop) {
      echo $prop->getMessage()."<br>";
      return false;
    }
  }
}


// Autor erzeugen (Objekt)
$autor = new Mensch("Matthias", "m");

// Auf die Methode getName() zugreifen
echo $autor->getName()."<br>";

// Autor umbenennen
$autor->umbenennen("Matze");

// Neuen Namen ausgeben
echo "Neuer Name: ".$autor->getName()."<br>";

// Folgende Codezeile erzeugt einen Fehler
// da die Eigenschaft geschützt ist!
// echo $autor->geschlecht;

// An das Alter gelangt man mit Hilfe der
// Funktion getAlter()
echo "Alter des Autors: " . $autor->getAlter() ."<br>";

// Stammt Autor vom Mensch ab?
if ($autor instanceof Mensch) {
echo $autor->getName()." ist ein Mensch!<br>";
}

// Wer sind die Vorfahren der Menschen
echo "Der Mensch ist ein Nachfahre von ".Mensch::getVorfahre()."<br>";

// Neue Theorie
Mensch::neueEvolutionstheorie("Alien");

// Wer sind nun die Vorfahren der Menschen
echo "Der Mensch ist ein Nachfahre von ".Mensch::getVorfahre()."<br>";

// Autorin erzeugen (Objekt)
$autorin = new Deutscher("Caroline", "w");

// Die Methode behoerdengang ist über
// das Objekt nicht zu erreichen, da
// diese als private gekennzeichnet ist!
// $autorin->behoerdengang(true);

// Gibt den Ausnahmefall aus, da das
// zweite Argument false ist (throw/catch).
$autorin->umbenennen("Caro", false);

?>

Ausgabe
Matthias
Neuer Name: Matze
Alter des Autors: 1
Matze ist ein Mensch!
Der Mensch ist ein Nachfahre von Affe
Der Mensch ist ein Nachfahre von Alien
Umbennenung fehlgeschlagen!

...und so scheidet Matze dahin
...und so scheidet Caroline dahin