Source of: /manual/en/language.exceptions.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = 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 => 'en',
),
'this' =>
array (
0 => 'language.exceptions.php',
1 => 'Exceptions',
),
'up' =>
array (
0 => 'langref.php',
1 => 'Language Reference',
),
'prev' =>
array (
0 => 'language.namespaces.faq.php',
1 => 'FAQ: things you need to know about namespaces',
),
'next' =>
array (
0 => 'language.exceptions.extending.php',
1 => 'Extending Exceptions',
),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);
manual_header();
?>
<div>
<h1>Exceptions</h1>
<h2>Table of Contents</h2><ul class="chunklist chunklist_chapter"><li><a href="language.exceptions.extending.php">Extending Exceptions</a></li></ul>
<p class="para">
PHP 5 has an exception model similar to that of other programming languages.
An exception can be <i>throw</i>n, and caught
("<i>catch</i>ed") within PHP. Code may be surrounded in a
<i>try</i> block, to facilitate the catching of potential
exceptions. Each <i>try</i> must have at least one
corresponding <i>catch</i> block. Multiple
<i>catch</i> blocks can be used to catch different classes of
exeptions. Normal execution (when no exception is thrown within the
<i>try</i> block, or when a <i>catch</i> matching
the thrown exception's class is not present) will continue after that last catch
block defined in sequence. Exceptions can be <i>throw</i>n (or
re-thrown) within a <i>catch</i> block.
</p>
<p class="para">
When an exception is thrown, code following the statement will not be
executed, and PHP will attempt to find the first matching
<i>catch</i> block. If an
exception is not caught, a PHP Fatal Error will be issued with an
"<i>Uncaught Exception ...</i>" message, unless a handler has
been defined with <a href="function.set-exception-handler.php" class="function">set_exception_handler()</a>.
</p>
<blockquote><p><b class="note">Note</b>:
Internal PHP functions mainly use
<a href="errorfunc.configuration.php#ini.error-reporting" class="link">Error reporting</a>, only modern
<a href="language.oop5.php" class="link">Object oriented</a>
extensions use exceptions. However, errors can be simply translated to
exceptions with <a href="class.errorexception.php" class="link">ErrorException</a>.
<br />
</p></blockquote>
<div class="tip"><b class="tip">Tip</b>
<p class="para">
The <a href="intro.spl.php" class="link">Standard PHP Library (SPL)</a> provides a
good number of built-in exceptions.
</p>
</div>
<div class="example">
<p><b>Example #1 Throwing an Exception</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?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 by zero.'</span><span style="color: #007700">);<br /> }<br /> else 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">'Caught exception: '</span><span style="color: #007700">, </span><span style="color: #0000BB">$e</span><span style="color: #007700">-></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">// Continue execution<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'Hello World'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>The above example will output:</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
0.2
Caught exception: Division by zero.
Hello World
</pre></div>
</div>
</div>
<div class="example">
<p><b>Example #2 Nested Exception</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?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">/* rethrow it */<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">-></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">-></span><span style="color: #0000BB">testing</span><span style="color: #007700">();<br /><br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>The above example will output:</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
string(4) "foo!"
</pre></div>
</div>
</div>
</div>
<?php manual_footer(); ?>