array get_class_vars ( string $class_name )
Als Parameter übergeben Sie den Namen der gewünschten Klasse und erhalten als Rückgabewert ein Array mit den vorgegebenen Eigenschaftsvariablen im Format name_der_variablen => wert .
Gerade beim Zugriff auf externe Datenspeicher und Datenbanken ist oftmals eine Fehleroder Ausnahmebehandlung notwendig, falls beispielsweise die Verbindung nicht zustande kommt oder anderweitige Probleme entstehen. Dafür liefert Ihnen PHP 5 mit try... catch eine entsprechende Routine (Bild 3). Im Rahmen der Fehlerbehandlung können Sie für spezielle Ausnahmen eine konkrete Vorgehensweise festlegen, aber auch innerhalb eines Programmcodes mit throw() einen Ausnahmefall direkt auslösen. Die Struktur einer Ausnahmebehandlung sieht wie folgt aus:
class errorhandling extends Exception
{}
try {
Aktion_1();
}
catch (Exception $ausnahme_1)
{
// Behandlung des ersten Fehlers oder
der ersten Ausnahme
}
catch (Exception $ausnahme_2)
{
// Behandlung des zweiten Fehlers oder
der zweiten Ausnahme
}
PHP 5 bietet zahlreiche vordefinierte Ausnahmen an (Bild 3)
Die Struktur ist einfach erklärt: Es wird versucht, den Code innerhalb der try -Klammer auszuführen. Tritt ein Fehlerfall auf, soll dieser mit catch abgefangen werden und die Anwendung in einen definierten Endzustand überführt werden.
Bei einer bestimmten Situation löst die Anwendung einen Fehlerfall aus, beispielsweise wenn eine Variable nicht innerhalb eines erwarteten Bereichs ist. Dies geschieht mit Hilfe von throw() und wird innerhalb einer Ausnahmebehandlung entweder individuell für eine definierte Ausnahme oder allgemeingültig für alle zu einem Zustand ohne Absturz geführt.
Sie können auch verschiedene Klassen von Ausnahmen abfangen, indem Sie mehrere catch -Blöcke verwenden. Die Programmausführung wird, falls kein Fehler auftritt, nach dem letzten catch -Block fortgesetzt. Ausnahmen können auch innerhalb eines catch -Blocks ausgelöst und anschließend abgefangen werden.
Im Beispiel in Listing 3 wird überprüft, ob die Partygäste Getränke und, falls ja, die richtigen mitgebracht haben. Erwartet wird von den Gästen entweder ein Kasten Bier oder ein Kasten Mineralwasser. Zuerst wird eine leere Klasse für die Ausnahmebehandlung der Getränkeversorgung erzeugt. In der Klasse partygast wird anschließend festgelegt, welche Getränke abgemacht und erwünscht waren. Bringt der Gast keine Getränke oder die falschen mit, wird eine entsprechende Fehlermeldung ausgegeben und diese mit dem Fehlercode 10 versehen.
LISTING 3: FEHLERBEHANDLUNG
class verpflegungskatastrophe extends Exceptions {}
class partygast
{
public function getraenkemitbringen($getraenke){
if (!is_array ($getraenke) || $getraenke == 'Kasten Bier' ||
$getraenke == 'Kasten Mineralwasser') {
throw new verpflegungskatastrophe ('Du solltest Bier oder
Mineralwasser mitbringen!!!', 10);
}
else
{
$treffer = 'Prima :-) Jetzt kann die Party steigen';
return $treffer;
}
}
}
$paul = new partygast;
try
{
$willkommener_gast = $paul -> getraenkemitbringen ('Prosecco');
echo $willkommener_gast;
}
catch (verpflegungskatastrophe $Exception)
{
echo 'Code: '.$Exception -> getCode().'
';
echo 'Fehler: '.$Exception -> getMessage().'
';
echo 'Datei: '.$Exception -> getFile().'
';
echo 'Zeile: '.$Exception -> getLine().'
';
}
In der Programmroutine wird anschließend ein neues Objekt $paul erzeugt. Der Versuch, die Methode getraenkemitbringen zuzuweisen, wird durch try... catch abgesichert. Da sich der gute Paul nicht an die Vorgaben gehalten hat und eine Flasche Prosecco mitbringt, wird eine Ausnahme mit der Fehlernummer 10 ausgelöst. Diese wird im catch -Teil abgefangen. Die Informationen der Ausnahme stammen aus der zuvor erzeugten leeren Klasse verpflegungskatastrophe . Auf diese können Sie anschließend über die Methoden und Eigenschaften der Exception -Klasse zugreifen und diese ausgeben.
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:
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.'
';
}
}
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.
Читать дальше