:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte
Unternehmen im
Anbieterverzeichnis von SELFPHP
:: SELFPHP Forum ::
Fragen rund um die Themen PHP? In über
120.000 Beiträgen finden Sie sicher die passende
Antwort!
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
:: Qozido ::
Die Bilderverwaltung mit Logbuch für
Taucher und Schnorchler.
|
|
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
|
|
|
|
|
|