<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/langref.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'language.exceptions.php',
    1 => 'Exceptions (Ausnahmen)',
    2 => 'Exceptions (Ausnahmen)',
  ),
  'up' => 
  array (
    0 => 'langref.php',
    1 => 'Sprachreferenz',
  ),
  'prev' => 
  array (
    0 => 'language.errors.php7.php',
    1 => 'Fehler in PHP 7',
  ),
  'next' => 
  array (
    0 => 'language.exceptions.extending.php',
    1 => 'Exceptions erweitern',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'language/exceptions.xml',
  ),
  'history' => 
  array (
  ),
  'extra_header_links' => 
  array (
    'rel' => 'alternate',
    'href' => '/manual/en/feeds/language.exceptions.atom',
    'type' => 'application/atom+xml',
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="language.exceptions" class="chapter">
 <h1 class="title">Exceptions (Ausnahmen)</h1>
<h2>Inhaltsverzeichnis</h2><ul class="chunklist chunklist_chapter"><li><a href="language.exceptions.extending.php">Exceptions erweitern</a></li></ul>

 <p class="para">
  PHP hat ein Exceptionmodell ähnlich dem anderer Programmiersprachen. Eine
  Exception kann in PHP geworfen (<a href="language.exceptions.php" class="link"><code class="literal">throw</code></a>) und abgefangen (<a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>) werden.
  Um das Abfangen potentieller Exceptions zu ermöglichen, sollte der jeweilige
  Code von einem <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>-Block umschlossen werden. Jeder <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>-Block muss
  mindestens einen zugehörigen <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>- oder <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block besitzen.
 </p>
 <p class="para">
  Wenn eine Exception geworfen wird und der aktuelle Funktionsbereich keinen
  <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block hat, steigt die Exception im Aufrufstapel bis zur aufrufenden
  Funktion auf, bis sie einen passenden <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block findet. Alle
  <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Blöcke, auf die sie unterwegs trifft, werden ausgeführt. Wenn der
  Aufrufstapel bis in den globalen Bereich abgewickelt ist, ohne auf einen
  passenden <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block zu stoßen, bricht das Programm mit einem fatalen
  Fehler ab, es sei denn, es wurde ein globaler Exception-Handler gesetzt.
 </p>
 <p class="para">
  Das geworfene Objekt muss eine Instanz von (<a href="language.operators.type.php" class="link"><code class="literal">instanceof</code></a>)
  <span class="interfacename"><a href="class.throwable.php" class="interfacename">Throwable</a></span> sein. Der Versuch ein Objekt
  werfen, das das nicht ist, wird einen fatalen PHP-Fehler zur Folge
  haben.
 </p>
 <p class="para">
  Seit PHP 8.0.0 ist das Schlüsselwort <a href="language.exceptions.php" class="link"><code class="literal">throw</code></a> ein Ausdruck und kann in jedem
  Ausdruckskontext verwendet werden. In früheren Versionen war es eine
  Anweisung und musste in einer eigenen Zeile stehen.
 </p>

 <div id="language.exceptions.catch" class="sect1">
  <h2 class="title"><code class="literal">catch</code></h2>
  <p class="para">
   Ein <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block definiert, wie auf eine geworfene Exception reagiert
   werden soll. Ein <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block definiert eine oder mehrere Arten von
   Exceptions oder Fehlern, die er behandeln kann, und optional eine Variable,
   der die Exception zugewiesen werden soll (vor PHP 8.0.0 war die Variable
   erforderlich). Der erste <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block, auf den eine geworfene Exception
   oder ein Fehler trifft, der mit dem Typ des geworfenen Objekts
   übereinstimmt, behandelt das Objekt.
  </p>
  <p class="para">
   Mehrere <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Blöcke können verwendet werden, um verschiedene Klassen von
   Exceptions abzufangen. Wenn innerhalb des <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>-Blocks keine Exception
   geworfen wird, wird die normale Programmausführung nach dem letzten in
   Folge definierten <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block fortgesetzt. Exceptions können innerhalb
   eines <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Blocks geworfen (oder erneut geworfen) werden. Falls nicht,
   wird die Ausführung nach dem <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block, der geworfen wurde,
   fortgesetzt.
  </p>
  <p class="para">
   Wenn eine Exception geworfen wird, führt PHP den Programmcode hinter der
   werfenden Anweisung nicht aus, sondern versucht, den ersten passenden
   <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block zu finden. Falls eine Exception nicht abgefangen wird, wird
   ein fataler Fehler mit einer
   &quot;<code class="literal">Uncaught Exception ...</code>&quot;-Nachricht ausgegeben, sofern
   keine Behandlung mittels <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span>
   definiert wurde.
  </p>
  <p class="para">
   Seit PHP 7.1.0 kann ein <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block mehrere Exceptions getrennt durch
   Pipe-Zeichen (<code class="literal">|</code>) angeben. Dies ist nützlich, wenn
   unterschiedliche Exceptions von unterschiedlichen Klassenhierarchien gleich
   behandelt werden sollen.
  </p>
  <p class="para">
   Seit PHP 8.0.0 ist der Variablenname für eine abgefangene Exception
   optional. Wird er nicht angegeben, wird der <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block trotzdem
   ausgeführt, hat aber keinen Zugriff auf das geworfene Objekt.
  </p>
 </div>

 <div id="language.exceptions.finally" class="sect1">
  <h2 class="title"><code class="literal">finally</code></h2>
  <p class="para">
   Ein <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block kann auch nach den <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Blöcken oder stattdessen
   definiert werden. Egal, ob eine Exception geworfen wurde, wird der Code
   innerhalb des <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Blocks immer nach den <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>- und <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Blöcken
   ausgeführt, bevor die normale Ausführung fortgesetzt wird.
  </p>
  <p class="para">
   Eine bemerkenswerte Wechselwirkung besteht zwischen dem <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block
   und einer <a href="function.return.php" class="link"><code class="literal">return</code></a>-Anweisung. Wird eine <a href="function.return.php" class="link"><code class="literal">return</code></a>-Anweisung innerhalb der
   <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>- oder <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Blöcke angetroffen, wird der <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block dennoch
   ausgeführt. Außerdem wird die <a href="function.return.php" class="link"><code class="literal">return</code></a>-Anweisung ausgewertet, wenn sie
   angetroffen wird, aber das Ergebnis wird erst nach dem <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block
   zurückgegeben. Des Weiteren wird, wenn der <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block ebenfalls eine
   <a href="function.return.php" class="link"><code class="literal">return</code></a>-Anweisung enthält, der Wert aus dem <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block zurückgegeben.
  </p>
  <p class="para">
   Eine weitere bemerkenswerte Wechselwirkung tritt auf, wenn sowohl im <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>-
   als auch im <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block eine Exception geworfen wird. In diesem Fall
   wird die vom <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block geworfene Exception weitergegeben, während die
   vom <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>-Block geworfene Exception als deren vorherige Exception verwendet
   wird.
  </p>
 </div>

<div id="language.exceptions.exception-handler" class="sect1">
  <h2 class="title">Der globale Exception-Handler</h2>
  <p class="para">
   Wenn eine Exception in den globalen Bereich aufsteigen darf, kann sie durch
   einen globalen Exception-Handler abgefangen werden, falls gesetzt. Die
   Funktion <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span> kann eine Funktion
   festlegen, die anstelle eines <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Blocks aufgerufen wird, wenn kein
   anderer Block aufgerufen wird. Der Effekt ist im Wesentlichen derselbe, als
   ob das gesamte Programm in einen <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>-<a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>-Block mit dieser Funktion
   als <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> verpackt wäre.
  </p>
 </div>

 <div id="language.exceptions.notes" class="sect1">
  <h2 class="title">Anmerkungen</h2>

  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <p class="para">
    Interne PHP-Funktionen verwenden in den meisten Fällen
    <a href="errorfunc.configuration.php#ini.error-reporting" class="link">Error-Reporting</a>, nur moderne
    <a href="language.oop5.php" class="link">objektorientierte</a> Erweiterungen
    nutzen Exceptions. Fehler können allerdings einfach mittels
    <a href="class.errorexception.php" class="link">ErrorException</a> in eine
    Exception umgewandelt werden. Diese Technik funktioniert jedoch nur bei
    nicht-fatalen Fehlern.
   </p>
   <div class="example" id="example-1">
    <p><strong>Beispiel #1 Fehlermeldungen in Exceptions umwandeln</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">exceptions_error_handler</span><span style="color: #007700">(</span><span style="color: #0000BB">$severity</span><span style="color: #007700">, </span><span style="color: #0000BB">$message</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$lineno</span><span style="color: #007700">) {<br />    throw new </span><span style="color: #0000BB">ErrorException</span><span style="color: #007700">(</span><span style="color: #0000BB">$message</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">$severity</span><span style="color: #007700">, </span><span style="color: #0000BB">$filename</span><span style="color: #007700">, </span><span style="color: #0000BB">$lineno</span><span style="color: #007700">);<br />}<br /><br /></span><span style="color: #0000BB">set_error_handler</span><span style="color: #007700">(</span><span style="color: #DD0000">'exceptions_error_handler'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p></blockquote>
  <div class="tip"><strong class="tip">Tipp</strong>
   <p class="para">
    Die <a href="book.spl.php#intro.spl" class="link">Standard PHP Library (SPL)</a> bietet
    eine große Anzahl
    <a href="spl.exceptions.php" class="link">eingebauter Exceptions</a>.
   </p>
  </div>
 </div>

 <div id="language.exceptions.examples" class="sect1">
  <h2 class="title">Beispiele</h2>

  <div class="example" id="example-2">
   <p><strong>Beispiel #2 Eine Exception werfen</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />    if (!</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />       throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'Division durch Null.'</span><span style="color: #007700">);<br />    }<br />    return </span><span style="color: #0000BB">1</span><span style="color: #007700">/</span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />}<br /><br />try {<br />    echo </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />    echo </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Exception abgefangen: '</span><span style="color: #007700">,  </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Ausführung fortsetzen<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hallo Welt\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
0.2
Exception abgefangen: Division durch Null
Hallo Welt
</pre></div>
   </div>
  </div>
  <div class="example" id="example-3">
   <p><strong>Beispiel #3 Exceptionbehandlung mit einem <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />    if (!</span><span style="color: #0000BB">$x</span><span style="color: #007700">) {<br />        throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'Division durch Null.'</span><span style="color: #007700">);<br />    }<br />    return </span><span style="color: #0000BB">1</span><span style="color: #007700">/</span><span style="color: #0000BB">$x</span><span style="color: #007700">;<br />}<br /><br />try {<br />    echo </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Exception abgefangen: '</span><span style="color: #007700">,  </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} finally {<br />    echo </span><span style="color: #DD0000">"Erstes finally.\n"</span><span style="color: #007700">;<br />}<br /><br />try {<br />    echo </span><span style="color: #0000BB">inverse</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Exception abgefangen: '</span><span style="color: #007700">,  </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />} finally {<br />    echo </span><span style="color: #DD0000">"Zweites finally.\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// Ausführung fortsetzen<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Hallo Welt\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
0.2
Erstes finally.
Exception abgefangen: Division durch Null.
Zweites finally.
Hallo Welt
</pre></div>
   </div>
  </div>
  <div class="example" id="example-4">
   <p><strong>Beispiel #4 Wechselwirkung zwischen dem <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>-Block und <a href="function.return.php" class="link"><code class="literal">return</code></a></strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br />    try {<br />        throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">);<br />    } catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />        return </span><span style="color: #DD0000">'catch'</span><span style="color: #007700">;<br />    } finally {<br />        return </span><span style="color: #DD0000">'finally'</span><span style="color: #007700">;<br />    }<br />}<br /><br />echo </span><span style="color: #0000BB">test</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
finally
</pre></div>
   </div>
  </div>
  <div class="example" id="example-5">
   <p><strong>Beispiel #5 Verschachtelte Exceptions</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyException </span><span style="color: #007700">extends </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{ }<br /><br />class </span><span style="color: #0000BB">Test </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">testing</span><span style="color: #007700">() {<br />        try {<br />            try {<br />                throw new </span><span style="color: #0000BB">MyException</span><span style="color: #007700">(</span><span style="color: #DD0000">'foo!'</span><span style="color: #007700">);<br />            } catch (</span><span style="color: #0000BB">MyException $e</span><span style="color: #007700">) {<br />                </span><span style="color: #FF8000">// Exception erneut werfen<br />                </span><span style="color: #007700">throw </span><span style="color: #0000BB">$e</span><span style="color: #007700">;<br />            }<br />        } catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">());<br />        }<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">Test</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">testing</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
string(4) &quot;foo!&quot;
</pre></div>
   </div>
  </div>
  <div class="example" id="example-6">
   <p><strong>Beispiel #6 Behandlung mehrerer Exceptions in einem Catch-Block</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyException </span><span style="color: #007700">extends </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{ }<br /><br />class </span><span style="color: #0000BB">MyOtherException </span><span style="color: #007700">extends </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{ }<br /><br />class </span><span style="color: #0000BB">Test </span><span style="color: #007700">{<br />    public function </span><span style="color: #0000BB">testing</span><span style="color: #007700">() {<br />        try {<br />            throw new </span><span style="color: #0000BB">MyException</span><span style="color: #007700">();<br />        } catch (</span><span style="color: #0000BB">MyException </span><span style="color: #007700">| </span><span style="color: #0000BB">MyOtherException $e</span><span style="color: #007700">) {<br />            </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">$e</span><span style="color: #007700">));<br />        }<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$foo </span><span style="color: #007700">= new </span><span style="color: #0000BB">Test</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">testing</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
string(11) &quot;MyException&quot;
</pre></div>
   </div>
  </div>
  <div class="example" id="example-7">
   <p><strong>Beispiel #7 Catch-Block ohne Angabe einer Variablen</strong></p>
   <div class="example-contents"><p>Erst ab PHP 8.0.0 erlaubt.</p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">SpecificException </span><span style="color: #007700">extends </span><span style="color: #0000BB">Exception </span><span style="color: #007700">{}<br /><br />function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br />    throw new </span><span style="color: #0000BB">SpecificException</span><span style="color: #007700">(</span><span style="color: #DD0000">'Oopsie'</span><span style="color: #007700">);<br />}<br /><br />try {<br />    </span><span style="color: #0000BB">test</span><span style="color: #007700">();<br />} catch (</span><span style="color: #0000BB">SpecificException</span><span style="color: #007700">) {<br />    print </span><span style="color: #DD0000">"Eine SpecificException wurde geworfen, aber die Details interessieren uns nicht."</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
Eine SpecificException wurde geworfen, aber die Details interessieren uns nicht.
</pre></div>
   </div>
  </div>
  <div class="example" id="example-8">
   <p><strong>Beispiel #8 Als Ausdruck werfen</strong></p>
   <div class="example-contents"><p>Erst ab PHP 8.0.0 erlaubt.</p></div>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">test</span><span style="color: #007700">() {<br />    </span><span style="color: #0000BB">do_something_risky</span><span style="color: #007700">() or throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'Es hat nicht funktioniert'</span><span style="color: #007700">);<br />}<br /><br />function </span><span style="color: #0000BB">do_something_risky</span><span style="color: #007700">() {<br />    return </span><span style="color: #0000BB">false</span><span style="color: #007700">; </span><span style="color: #FF8000">// Fehler simulieren<br /></span><span style="color: #007700">}<br /><br />try {<br />    </span><span style="color: #0000BB">test</span><span style="color: #007700">();<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    print </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">();<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
Es hat nicht funktioniert
</pre></div>
    </div>
   </div>
   <div class="example" id="example-9">
    <p><strong>Beispiel #9 Exception in try und in finally</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">try {<br />    try {<br />        throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #0000BB">message</span><span style="color: #007700">: </span><span style="color: #DD0000">'Dritte'</span><span style="color: #007700">, </span><span style="color: #0000BB">previous</span><span style="color: #007700">: new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'Vierte'</span><span style="color: #007700">));<br />    } finally {<br />        throw new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #0000BB">message</span><span style="color: #007700">: </span><span style="color: #DD0000">'Erste'</span><span style="color: #007700">, </span><span style="color: #0000BB">previous</span><span style="color: #007700">: new </span><span style="color: #0000BB">Exception</span><span style="color: #007700">(</span><span style="color: #DD0000">'Zweite'</span><span style="color: #007700">));<br />    }<br />} catch (</span><span style="color: #0000BB">Exception $e</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(<br />        </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(),<br />        </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(),<br />        </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(),<br />        </span><span style="color: #0000BB">$e</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getPrevious</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">getMessage</span><span style="color: #007700">(),<br />    );<br />}</span></span></code></div>
    </div>

    <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt folgende Ausgabe:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(5) &quot;Erste&quot;
string(6) &quot;Zweite&quot;
string(5) &quot;Dritte&quot;
string(6) &quot;Vierte&quot;
</pre></div>
   </div>
  </div>
 </div>

 

</div>
<?php manual_footer($setup); ?>