Wie fängt man Exceptions ab? top

Als allererstes ein Stück Code:

<?php
function eineFunktion($zahl)
{
  if( 5 > $zahl )
    throw new Exception('Die Zahl ist zu klein', 1);

  if( 10 < $zahl )
    throw new Exception('Die Zahl ist zu groß', 2);
   
  return $zahl;
}

//hier beginnt der interessante Teil
try
{
  echo 'die Zahl war: ' . eineFunktion(3);
}
catch(Exception $e)
{
  echo 'Meldung: ' . $e->getMessage();
}
?>

Sobald wir diesen Code ausführen solle die Meldung die Zahl war: 7 erscheinen. Wenn wir aber der Funktion statt 7 eine 3 übergeben wird uns gesagt, dass die Zahl zu klein sei. Das selbe Gilt auch für Zahlen, die zu Groß sind, denn da wirft die Funktion auch eine Ausnahme.

Jetzt wissen wir, in etwa, wie Ausnahmen benutzt werden können. Kommen wir zu der genauen Syntax:

Der Codeblock, der auf Ausnahmen getestet werden soll, muss in einen try-Block geschlossen werden.

Dahinter kommt ein sogenannter “catch-Block”, erst hier wird die Exception abgefangen. Er besteht aus dem Schlüsselwort catch und einer runden Klammer. In der Klammer muss die Exception-Art angegeben werden, in dem Beispiel wird nur eine Standard-Exception benutzt, aber die Klasse  kann, wie jede Klasse, erweitert werden, so dass man mit der Exception-Art(im Beispiel Exception) die Ausnahme viel präziser bestimmen kann. Gefolgt von einer Variablen, in die die Exception abgelegt wird(im Beispiel die Variable $e). In dem Block kommt, der Code rein, der dann ausgeführt wird, wenn die passende Exception gefangen worden ist. Hier lässt sich Code zu fehler behebung einbinden. So lässt sich bei einem Datenbankfehler der letzte Befehl zurücksetzen oder einfach nur eine benutzerfreundliche Fehlermeldung ausgeben.

Wenn, aber, eine Exception außerhalb des try-Blocks geworfen wird, wird das Script abgebrochen und die Exception ausgegeben.

Wie wirft man Exceptions? top

Wer den letzten Code sich angeguckt hat, wird bemerkt haben, dass in eineFunktion Exceptions geworfen werden. Man erstellt mit new eine neue Exception und wirft sie mit throw weiter.

Noch mal der Exception-Code von oben:

<?php
function eineFunktion($zahl)
{
  if( 5 > $zahl )
    throw new Exception('Die Zahl ist zu klein', 1);

  if( 10 < $zahl )
    throw new Exception('Die Zahl ist zu groß', 2);
   
  return $zahl;
}
?>

Wie wir in der Exception-Klassendefinition erkennen können, erwartet der Konstruktor einen String und danach eine optionale Zahl. Der String ist eine Beschreibung des Fehlers. Die Zahl kann eine Fehler-ID enthalten, um die Exception besser identifizieren zu können.