Tải bản đầy đủ (.pdf) (30 trang)

PHP – Endlich objektorientiert- P11

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (576.49 KB, 30 trang )

4 – PHP objektorientiert
270
Der Datenzugriff kann natürlich um Transaktionen und/oder verschlüsselten Zugriff
ergänzt werden. Es wurde im UML-Teil des dritten Kapitels bereits erklärt, dass Inter-
faces auch vererbt werden können, um zusätzliche Funktionalität hinzuzufügen. Dies
kann beispielsweise durch die Definition interface iCryptedDZ extends iDZ erfolgen.
Nun muss der Zugriff auf diese Implementierung noch getestet werden. Dazu wird auf
die existierende Börsendatenbank aus dem zweiten Kapitel zurückgegriffen (Abb. 2.11
ff.). In der Datenbank boerse ist eine Tabelle ag enthalten, die einen Identifikator und den
Namen von Aktiengesellschaften enthält. Zum Testen wird die Verbindung zum Daten-
bankserver geöffnet, der Name einer Aktiengesellschaft aktualisiert, anschließend die
gesamte Tabelle ausgelesen und im letzten Schritt wird die Verbindung wieder geschlos-
sen.
Im Gegensatz zum zweiten Kapitel wird die Datenbankverbindung hier innerhalb des
Verbindungsobjekts $db verwaltet. Dieses Objekt verfügt durch die Implementierung
des zuvor definierten Interfaces über die Methoden

öffnen

schreiben

lesen

schließen
Für die Parametrierung werden beim Öffnen, Schreiben und Lesen eigene Parameterob-
jekte definiert, die beim Öffnen über die Parameter host, user, pass und db sowie beim Sch-
reiben und Lesen über den Parameter sql verfügen.
Erkennen Sie den Mehrwert gegenüber der Realisierung im zweiten Kapitel? Der Pro-
grammierer, der ein mysqlDZ-Objekt verwendet, muss nichts über die MySQL-Befehle
von PHP wissen. Er muss lediglich die zum Öffnen notwendigen Parameter kennen und
die SQL-Sprache beherrschen. Über dasselbe Interface könnten Sie auch Implementie-


rungen für eine Oracle-, MS-SQL- oder eine DB2-Datenbank schreiben. Die Verwendung
wäre identisch. Gegebenenfalls müssten die Parameter etwas verändert werden. Mit
ähnlichen Parametern lassen sich auf die gleiche Art und Weise auch Zugriffe auf
Dateien realisieren.
Die Eingabe der Parameter erfolgt jedoch üblicherweise über eine Konfigurationseinga-
bemaske, die einem eingeloggten Administrator zur Verfügung steht. Für jede Imple-
}

private function starts_with($str,$wert){
return strtolower(substr($str,0,strlen($wert)))==strtolower($wert);
}
}
?>
Listing 4.47: Die Implementierung des Interfaces für einen MySQL-Zugriff (Forts.)
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Realisierung von Klassengeflechten
PHP – Endlich objektorientiert 271
mentierung muss also im Frontend noch eine passende Eingabemaske erstellt werden,
mit der die Parameter festgelegt werden.
Doch zunächst zurück zum Testprogramm. Bei $p_öffnen, $p_schreiben und $p_lesen han-
delt es sich um die Parameterobjekte, die gemäß den Vorgaben aus der Implementierung
mysqlDZ gefüllt werden. Das Verbindungsobjekt selbst heißt $db. Der schreibende
Zugriff $db->schreiben($p_schreiben) liefert als Ergebnis lediglich einen Wahrheitswert,
der den Erfolg des Schreibzugriffs widerspiegelt.
Interessant ist der lesende Zugriff. Wie bereits beschrieben wurde, liefert $ausgabe=$db-
>lesen($p_lesen) ein zweidimensionales Feld als Ergebnismenge in der Referenz $ausgabe
zurück. Mit den PHP-Befehlen count($ausgabe) können Sie die Anzahl der Datensätze
ermitteln und mit count($ausgabe[0]) die Anzahl der zurückgegebenen Spalten der Ergeb-
nistabelle. Das sind die Spalten, die Sie hinter dem SELECT-Befehl der SQL-Anweisung
angegeben haben. Mit der verschachtelten foreach-Schleife können Sie nun auf jedes

Datenelement zugreifen.
<?php require_once("classloader.inc.php"); ?>
<html><body>
<?php
// neues DB-Verbindungsobjekt erstellen, welches das Interface iDZ
// implementiert
$db=new mysqlDZ();
// 1. öffnen
$p_öffnen=new ParameterListe();
$p_öffnen->add('host','localhost'); $p_öffnen->add('user','root');
$p_öffnen->add('pass',''); $p_öffnen->add('db','boerse');
if ($db->öffnen($p_öffnen)==FALSE) die('FEHLER beim DB-Öffnen!');
// 2. schreiben:
$p_schreiben=new ParameterListe();
$p_schreiben->add('sql','UPDATE ag SET name="Dopatka AG" WHERE ID=6');
echo 'Schreiben erfolgreich:';
echo var_dump($db->schreiben($p_schreiben)); echo '<br>';
// 3. lesen:
$p_lesen=new ParameterListe();
$p_lesen->add('sql','SELECT ID,name FROM ag ORDER BY ID');
$ausgabe=$db->lesen($p_lesen);
if ($ausgabe==FALSE){
$db->schliessen();
die('FEHLER beim DB-Zugriff!');
}
echo 'Anzahl Datensätze:'.count($ausgabe).'<br>';
echo 'Anzahl Spalten:'.count($ausgabe[0]).'<br>';
foreach($ausgabe as $index => $datensatz){
Listing 4.48: Test der Implementierung
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.

4 – PHP objektorientiert
272
Auf diese Weise wird die folgende Ausgabe erzeugt. Als Übung können Sie diese Aus-
gabe in eine HTML-Tabelle umformatieren.
Schreiben erfolgreich:bool(true)
Anzahl Datensätze:30
Anzahl Spalten:2
1
ADIDAS-SALOMON AG
2
ALLIANZ AG VNA O.N
3
ALTANA AG O.N.
4
BASF AG O.N.
5
BMW
6
Dopatka AG
...
4.2.6 Umsetzung von Sequenzdiagrammen
Wie Sie aus einem bestehenden UML-Klassendiagramm eine Klasse in PHP 5 ableiten
können, haben Sie bereits in den vorherigen Kapiteln erfahren. Hier wird die Definition
der Klassen, der Eigenschaften und Methoden sowie der Beziehungen der Klassen unter-
einander fokussiert. Ebenso wurde bereits ein Aktivitätsdiagramm aus Abbildung 4.9 in
Listing 4.36 in einer Methode umgesetzt.
foreach($datensatz as $index2 => $wert){
echo $wert;
echo '<br>';
}

}
// 4. schliessen
$db->schliessen();
?>
</body></html>
Listing 4.48: Test der Implementierung (Forts.)
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Realisierung von Klassengeflechten
PHP – Endlich objektorientiert 273
Die Beziehung zwischen einem UML-Sequenzdiagramm und einer PHP-Klasse wurde
jedoch noch nicht vorgestellt. Wie ein Aktivitätsdiagramm zeigt ein Sequenzdiagramm
einen Ablauf, der jedoch weniger einen Geschäftsprozess abbildet, sondern eher die
Interaktion von Objekten in den Vordergrund stellt.
Der Quellcode aus Listing 4.49 ist ein Ausschnitt aus dem bereits vorgestellten Quellcode
des Listings 4.41, der den Test des Klassengeflechts zwischen Kunden, Rechnungen,
Rechnungspositionen und Artikeln realisiert. Es wird also eine Kommunikation von
Objekten von vier verschiedenen Klassen abgebildet. Dieser existierende Quellcode soll
in diesem Beispiel in einem Sequenzdiagramm auf Muschelebene dokumentiert werden.
Zunächst wird über den Frontend-Quellcode – den man als Akteur gegenüber den ande-
ren Objekten sehen kann – die Methode getRechnungen des Kunden Dopatka aufgerufen.
Daraufhin erhält der Aufrufer eine Liste der Rechnungen als Rückgabe. Von dieser Liste
wird das erste Element, $rechnungen[0] betrachtet. Dies ist ein Objekt der Klasse Rech-
nung. Von dieser Rechnung werden nun Eigenschaften ausgelesen, nämlich

die Rechnungsnummer (ID)

das Rechnungsdatum

der Name des Kunden der Rechnung


der Rabatt auf die Gesamtrechnung

die Anzahl der Rechnungspositionen
Genau dieses Auslesen erkennen Sie im Sequenzdiagramm der Abbildung 4.12. Im
Anschluss daran wird jede Rechnungsposition in einer Schleife durchgegangen. Die
Schleife kann in einem Sequenzdiagramm nur schwer abgebildet werden und wird in
$rechnungen=$k1->getRechnungen();
echo '<b>RECHNUNG Nr. '.$rechnungen[0]->getID().' vom '.$rechnungen[0]
->getDatum().':</b><br>';
echo 'Kunde: '.$rechnungen[0]->getKunde()->getName().'<br>';
echo 'Rabatt auf die Gesamtrechnung: '.$rechnungen[0]
->getRabatt().'%<br>';
$positionen=$rechnungen[0]->getPositionen();
$i=0;
foreach ($positionen as $index => $p){
echo '<i>Position '.($i+1).':</i><br>';
echo $p[0]->getName().', '.$p[1].' Stück, '.$p[2].'% Rabatt<br>';
echo number_format($p[3],2).'EUR pro Stück, '.number_format($p[4],2).
'EUR gesamt incl. ';
echo $p[0]->getMwSt().'% MwSt.<br>';
$i++;
}
Listing 4.49: Quellcodeausschnitt aus Listing 4.41
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
4 – PHP objektorientiert
274
dem gepunkteten Kasten mit der Beschriftung *positionen (heißt: für alle Positionen) dar-
gestellt. Für jede Rechnungsposition werden nun ausgegeben:

der Name des Artikels


die bestellte Menge

der Rabatt dieser einzelnen Position

der Einzelpreis

der Gesamtpreis dieser Position

der Mehrwertsteuersatz
Der Name des Artikels wird über die Artikelreferenz ausgelesen, die jede Rechnungspo-
sition besitzt. Im Sequenzdiagramm der Abbildung 4.12 werden nur die ersten beiden
Lesevorgänge aus jeder Rechnungsposition, also Artikelname und Menge, dargestellt.
Abbildung 4.12: Sequenzdiagramm des PHP-Codes aus Listing 4.49
4.2.7 Umsetzung von Zustandsautomaten
Auch die Implementierung eines in UML definierten Zustandsdiagramms ist in PHP 5
möglich. Die folgende Abbildung 4.13 wurde bereits im dritten Kapitel zur Beschreibung
des Zustandsdiagramms der UML verwendet. Es beschreibt das Interface einer Flugre-
servierung mit den Methoden
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Realisierung von Klassengeflechten
PHP – Endlich objektorientiert 275

reservieren

stornieren

buchen
Dies ist zunächst Bestandteil eines Klassendiagramms. Zusätzlich wird jedoch ein Proto-
koll in Form eines Zustandsdiagramms dargestellt. Dieses Protokoll zeigt, in welcher

Reihenfolge die Methoden einer Klasse abgearbeitet werden müssen, die das Interface
und das Protokoll implementieren soll.
Abbildung 4.13: Zustandsdiagramm einer Interfacebeschreibung
Listing 4.50 zeigt im ersten Schritt die Definition des Interfaces zur Flugreservierung mit
den drei Methoden.
Hinweis
Sie erkennen daran, dass jedes UML-Diagramm der Designphase direkten Einfluss
auf den entstehenden Quellcode haben kann. Dies gilt insbesondere für die Fisch-
und Muschelebene. Jedes Diagramm stellt einen anderen Aspekt des Quellcodes dar
und kann direkt in Quellcode übersetzt werden. Ebenso ist eine Übersetzung von
Quellcode in UML zu Zwecken der Dokumentation möglich.
<?php
interface iFlugreservierung{
Listing 4.50: Das Interface der Flugreservierung
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
4 – PHP objektorientiert
276
Listing 4.51 zeigt nun die Implementierung des Interfaces unter Berücksichtigung des im
Zustandsdiagramm definierten Protokolls. Insgesamt existieren die Zustände
1. initialisiert
2. reserviert
3. gebucht
4. storniert
Der aktuelle Zustand wird in der Eigenschaft $zustand festgehalten und im Konstruktor
auf 0 gesetzt. Zusätzlich wird eine Methode getZustand() implementiert, mit der man den
Zustand des Reservierungsobjekts jederzeit abfragen kann.
Dem folgen die im Interface deklarierten Methoden reservieren, stornieren und buchen.
Dabei wird stets im ersten Schritt geprüft, ob die entsprechende Methode im aktuellen
Zustand überhaupt ausgeführt werden darf. Ist dies nicht der Fall, so gibt die Methode
FALSE zurück. Ansonsten erfolgt ein Zustandswechsel und die entsprechende Methode

gibt den Wahrheitswert TRUE zurück.
Zu berücksichtigen ist noch, dass nicht jede Reservierung in einer erfolgreichen Buchung
endet. Dies geschieht dann, wenn die Reservierung zu spät in eine Buchung umgewan-
delt wird und bereits viele andere Kunden den Flug ausgebucht haben. Da jedoch in die-
sem Beispiel kein vollständiges Reservierungssystem implementiert werden soll, wird
die Reservierung per Zufallssystem in eine Buchung umgewandelt. Dazu wird mit
srand(microtime()*1000000) ein Zufallszahlengenerator auf Basis der Systemzeit initiali-
siert. Der Befehl $zufall=rand(0,2) gibt dann eine Zufallszahl zwischen 0 und 2 zurück. Ist
die erstellte Zahl größer als 1, so gilt die Buchung als erfolgreich, ansonsten nicht. Der
Zustandswechsel innerhalb einer Methode wird dann wiederum in der Eigenschaft
$zustand festgehalten.
public function reservieren();
public function stornieren();
public function buchen();
}
?>
<?php
class AirlineReservierung implements iFlugreservierung{
// 0:init, 1:reserviert, 2:gebucht, 3:storniert
private $zustand;

public function __construct(){
$this->zustand=0;
}

Listing 4.51: Die Interfaceimplementerung und Umsetzung des Zustandsautomaten
Listing 4.50: Das Interface der Flugreservierung (Forts.)
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Realisierung von Klassengeflechten
PHP – Endlich objektorientiert 277

public function getZustand(){
switch($this->zustand){
case 0:
return 'initialisiert'; break;
case 1:
return 'reserviert'; break;
case 2:
return 'gebucht'; break;
case 3:
return 'storniert'; break;
default:
return 'FEHLER: Ungültiger Zustand!'; break;
}
}

public function reservieren(){
if ($this->zustand!=0) return FALSE;
$this->zustand=1; // reserviert
return TRUE;
}

public function stornieren(){
if ($this->zustand!=1) return FALSE;
$this->zustand=3; // storniert
return TRUE;
}

public function buchen(){
if ($this->zustand!=1) return FALSE;
// es ist Zufall, ob die Buchung funktioniert...

srand(microtime()*1000000);
$zufall=rand(0,2);
if ($zufall>1){
$this->zustand=3; // gebucht
}
else{
$this->zustand=2; // storniert
}
return TRUE;
}
Listing 4.51: Die Interfaceimplementerung und Umsetzung des Zustandsautomaten (Forts.)
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
4 – PHP objektorientiert
278
Der Test der Implementierung erfolgt, indem ein Objekt der AirlineReservierung ange-
lehnt wird. Im Anschluss daran wird ein Pfad im Zustandsdiagramm durchgegangen
und nach jedem Schritt der aktuelle Zustand des Objekts ausgegeben.
Die Ausgabe ist im Folgenden dargestellt, wobei in ca. 50 % der Fälle die dritte Ausgabe
storniert lautet:
initialisiert
reserviert
gebucht
4.3 Objektorientierte Fehlerbehandlung
Bereits im zweiten Kapitel wurde der @-Operator zur Fehlerunterdrückung vorgestellt.
So wird mit $datei=@fopen("counter.txt","w") die Meldung Warning: fopen(counter.txt)
[function.fopen]: failed to open stream... unterdrückt. Über die Prüfung
if($datei===FALSE){...} könnte dann eine Behandlung des Fehlers erfolgen, wenn die
Datei nicht existiert. Auch in Listing 4.51 werden Fehlerprüfungen durchgeführt, indem
eine if-Verzweigung zum Einsatz kommt und bei einem Fehler der Rückgabewert einer
Methode in besonderem Maße erfolgt. Die implementierten Methoden reservieren, stor-

nieren und buchen liefern im Fehlerfall FALSE zurück.
Auch die Implementierung der Datenbankzugriffsschnittstelle in Listing 4.48 arbeitet
auf diese Weise. Das Lesen aus der Datenbank liefert ein Datenfeld als Rückgabe oder
FALSE, wenn das Lesen nicht erfolgreich war.
}
?>
<?php require_once("classloader.inc.php"); ?>
<html><body>
<?php
$FDairline=new AirlineReservierung();
echo $FDairline->getZustand().'<br>';
$FDairline->reservieren();
echo $FDairline->getZustand().'<br>';
$FDairline->buchen();
echo $FDairline->getZustand().'<br>';
?>
</body></html>
Listing 4.52: Test der Umsetzung des Zustandsautomaten
Listing 4.51: Die Interfaceimplementerung und Umsetzung des Zustandsautomaten (Forts.)
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Objektorientierte Fehlerbehandlung
PHP – Endlich objektorientiert 279
Doch wird diese besondere Fehlerrückgabe vom Aufrufer einer Methode ausgewertet? Die
Antwort lautet: Meistens nicht! Dies liegt daran, dass man oft dazu neigt, nur den erfolgrei-
chen Fall zu betrachten, um möglichst schnell eine lauffähige Anwendung zu erhalten.
Im Fall der Flugreservierung hat dies zur Folge, dass Sie unter Umständen einen Flug in
einem Zustand stornieren wollen, der ungleich reserviert ist. In diesem Fall liefert die
Methode stornieren den Wert FALSE. Wird dieser Rückgabewert nicht ausgewertet, so
geht der Aufrufer der Methode davon aus, dass sein Flug erfolgreich storniert wurde.
Nun könnte man sagen: Aber dann hätte der Wert doch ausgewertet werden müssen!

Die Verantwortung für die Fehlerbehandlung wird also vom Programmierer der Klasse
auf den Aufrufer der Methode weitergegeben. Dieser muss dann nach jedem Methoden-
aufruf eine Prüfung vornehmen, ob der Aufruf erfolgreich war oder nicht. Dies führt
dazu, dass Sie den regulären, erfolgreichen Ablauf des Programms bei vielen Zeilen
Quellcode kaum noch nachvollziehen können, da er ständig von der Fehlerprüfung
unterbrochen wird.
So zeigt Listing 4.53 einen Ausschnitt aus dem bereits vorgestellten Listing des objektori-
entierten Datenzugriffs mit dem Datenzugriffsobjekt $db. Der reguläre Programmablauf
ist fett gedruckt, während der restliche Code zur Fehlerbehandlung dient. Bei größerem
Quellcode entstehen viele Fehlerpfade im Quellcode, sodass Sie den regulären Ablauf
des Programms kaum noch erkennen können.
Fehler in einer Klasse: werfen und fangen
Das Beispiel in Listing 4.53 zeigt ein Datenbankobjekt, das Fehler produzieren kann. Bei
der Flugreservierung in Abbildung 4.13 sind nicht alle Methodenaufrufe in jedem
Zustand erlaubt. Die jeweilige Methode des Reservierungsobjekts gibt bei einem ungül-
tigen Aufruf ebenso FALSE zurück wie die Methode des Datenbankobjekts.
Mit der fünften Version hat PHP nun ein Konzept zur Fehlerbehandlung eingeführt, das
bei anderen objektorientierten Sprachen wie Java, VB.NET oder C# bereits sehr erfolg-
reich ist. Dabei wird der Quellcode, der Fehler produzieren kann, an einem Stück in
einem so genannten try-Block ausgeführt. Die Idee ist, dass man zunächst versucht, den
Quellcode an einem Stück auszuführen. Ist dies erfolgreich, wird der aufrufende Code
linear abgearbeitet. Ansonsten ist ein Fehler aufgetreten, der von einer aufgerufenen
$p_lesen=new ParameterListe();
$p_lesen->add('sql','SELECT ID,name FROM ag ORDER BY ID');
$ausgabe=$db->lesen($p_lesen);
if ($ausgabe==FALSE){
$db->schliessen();
die('FEHLER beim DB-Zugriff!');
}
echo 'Anzahl Datensätze:'.count($ausgabe).'<br>';

echo 'Anzahl Spalten:'.count($ausgabe[0]).'<br>';
Listing 4.53: Ausschnitt aus Listing 4.48
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
4 – PHP objektorientiert
280
Methode eines Objekts geworfen wurde. Dieser Fehler wird dann in einem separaten
Quellcodebereich gefangen und behandelt.
Damit dieses Konzept funktioniert, müssen sich zunächst die Rückgabewerte der Methoden
auf ihre eigentliche Funktion besinnen; nämlich Werte, Objektreferenzen oder Datenfelder
zurückzugeben. Rückgabewerte geben in diesem Konzept also keine Fehlermeldungen wie
FALSE oder bestimmte Error-Codes zurück. Stattdessen können diese Methoden auf einem
neuen, unabhängigen Fehlerkanal ihre Fehlermeldungen zurückgeben.
In der objektorientierten Denkweise sind auch Fehler Objekte, die Eigenschaften und
Methoden besitzen. Da Objekte von der Schablone einer Klasse erzeugt werden, können
Sie nun eigene Fehlerklassen schreiben und ein Fehlermanagement ihrer komplexen
Anwendung einführen.
Listing 4.54 skizziert eine erste Fehlerklasse, die von der in PHP vordefinierten Klasse
Exception vererbt wird. Damit ist die eigene Klasse eine Exception, die geworfen und
behandelt werden kann. Unsere Fehlerklasse besteht aus

einer Fehlernummer

einer Fehlermeldung

einer Eigenschaft, in der man den Namen der Methode speichern kann, in der der
Fehler aufgetreten ist

einem Wahrheitswert, der signalisiert, ob ein Fehler kritisch ist oder nicht
Im Konstruktor werden die vier Eigenschaften wie üblich gesetzt. Beim Erzeugen eines
kritischen Fehlerobjekts könnte man beispielsweise automatisch eine E-Mail an den

Administrator absetzen (Kap. 2.2) oder ein Logging in eine Datenbank und/oder in eine
Textdatei vornehmen.
Zusätzlich besitzt die eigene Fehlerklasse Get-Methoden, um die gesetzten Eigenschaf-
ten auszulesen sowie eine toString()-Methode, damit der Fehler unmittelbar vorforma-
tiert ausgegeben werden kann.
<?php
class Fehler extends Exception{
private $nummer; private $meldung;
private $methode; private $kritisch=FALSE;
public function __construct($nummer,$meldung,$methode,$kritisch){
$this->nummer=$nummer; $this->meldung=$meldung;
$this->methode=$methode; $this->kritisch=$kritisch;
}

public function getNummer(){
return $this->nummer;
}
Listing 4.54: Die erste Fehlerklasse
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.
Objektorientierte Fehlerbehandlung
PHP – Endlich objektorientiert 281
Nachdem die Fehlerklasse erstellt wurde, kann sie in Verbindung mit anderen, eigenen
Klassen angewendet werden. Im ersten Beispiel wird die MySQL-Implementierung des
Datenbank-Interfaces iDZ auf die objektorientierte Fehlerbehandlung umgestellt.
Die Methoden liefern nun im Fehlerfall nicht mehr FALSE zurück, sondern NULL. Wenn
ein Fehler entsteht, weil beispielsweise das übergebene Parameterobjekt ungültig ist
oder keine Verbindung zum Datenbankserver hergestellt werden kann, wird ein neues
Fehlerobjekt erzeugt und geworfen. Der Befehl throw new Fehler(...) ruft den Konstruktor
der Fehlerklasse auf. Im Anschluss daran wird die aufgerufene Methode wie bei einer
return-Anweisung sofort beendet. Das Fehlerobjekt wird dabei automatisch an den Auf-

rufer weiter gegeben.
Im Gegensatz zu Listing 4.47 erkennen Sie, dass die Texte der neu erzeugten Fehlermel-
dungen (fett gedruckt) den Quelltext vergrößern. Bei der Fehlerbehandlung sind Sie
jedoch auf aussagekräftige Texte angewiesen. Als Alternative könnten Sie auch nur Feh-
lernummern vergeben und jeder Nummer in einer externen Textdatei oder in einer MS-
Excel-Liste einen Fehlertext zuweisen. Auf diese Weise kann mit mehreren externen
Dateien auch eine Sprachumschaltung der Fehlermeldungen realisiert werden.
public function getMeldung(){
return $this->meldung;
}
public function getMethode(){
return $this->methode;
}
public function istKritisch(){
return $this->kritisch;
}
public function __toString(){
$ausgabe='Fehler Nr. '.$this->getNummer().'<br>';
$ausgabe.='in Methode '.$this->getMethode().'<br>';
$ausgabe.=$this->getMeldung().'<br>';
return $ausgabe;
}
}
?>
<?php
class mysqlDZ implements iDZ{
private $conn; private $connected=FALSE;
public function öffnen($p){
if (!isset($p)) throw new Fehler(1,'Das Parameter-Objekt ist
Listing 4.55: Datenbankzugriff mit objektorientiertem Fehlermanagement

Listing 4.54: Die erste Fehlerklasse (Forts.)
Please purchase PDF Split-Merge on www.verypdf.com to remove this watermark.

×