<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'language.exceptions.php',
    1 => 'Exce&ccedil;&otilde;es',
    2 => 'Exce&ccedil;&otilde;es',
  ),
  'up' => 
  array (
    0 => 'langref.php',
    1 => 'Refer&ecirc;ncia da Linguagem',
  ),
  'prev' => 
  array (
    0 => 'language.errors.php7.php',
    1 => 'Erros no PHP 7',
  ),
  'next' => 
  array (
    0 => 'language.exceptions.extending.php',
    1 => 'Estendendo exce&ccedil;&otilde;es',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Exceções</h1>
<h2>Índice</h2><ul class="chunklist chunklist_chapter"><li><a href="language.exceptions.extending.php">Estendendo exce&ccedil;&otilde;es</a></li></ul>

 <p class="para">
  O PHP possui um modelo de exceções similar ao de outras linguagens
  de programação. Uma exceção pode ser lançada (<a href="language.exceptions.php" class="link"><code class="literal">throw</code></a>) e capturada (<a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>).
  Código pode ser envolvido por um bloco <a href="language.exceptions.php" class="link"><code class="literal">try</code></a> para facilitar a captura
  de exceções potenciais. Cada bloco <a href="language.exceptions.php" class="link"><code class="literal">try</code></a> precisa ter ao menos um bloco
  <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> ou <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> correspondente.
 </p>
 <p class="para">
  Se uma exceção é lançada e o escopo atual não possui nenhum block <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>,
  a exceção irá &quot;desempilhar&quot; o call stack pelas funções chamadoras
  até encontrar um bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> compatível. Todos os blocos <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> encontrados
  pelo caminho serão executados. Se a pilha é esvaziada até o
  escopo global sem encontrar um block <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> compatível, o programa irá
  terminar com um erro fatal a não ser que um manipulador global de exceções tenha sido configurado.
 </p>
 <p class="para">
  O objeto lançado precisa ser uma <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>.
  Tentar lançar um objeto sem essa ascendência resultará em um erro fatal.
 </p>
 <p class="para">
  A partir do PHP 8.0.0, a palavra chave <a href="language.exceptions.php" class="link"><code class="literal">throw</code></a> é uma expressão e pode ser utilizada em qualquer
  contexto de expressão. Em versões anteriores era considerado uma instrução e portanto precisava constar em sua própria linha.
 </p>

  <div id="language.exceptions.catch" class="sect1">
   <h2 class="title"><code class="literal">catch</code></h2>
   <p class="para">
    Um bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> define como o código responde a uma exceção lançada. Um bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>
    define um ou mais tipos de exceções ou erros que ele pode processar, e
    opcionalmente uma variável para receber a exceção lançada. (A variável era
    requerida anteriormente ao PHP 8.0.0.)  O primeiro bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> que uma exceção
    ou erro lançados encontram que seja compatível com o tipo objeto lançado irá
    processar esse objeto.
   </p>
   <p class="para">
    Múltiplos blocos <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> podem ser utilizados para capturar exceções
    diferentes. A execução normal (quando nenhuma exceção é lançada dentro de um
    <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>) irão continuar a execução após o último <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> definido em sequência.
    Exceções podem ser lançadas ou relançadas (<a href="language.exceptions.php" class="link"><code class="literal">throw</code></a>) dentro um bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>. Caso contrário,
    a execução irá continuar após o bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> que foi acionado.
   </p>
   <p class="para">
    Quando uma exceção é lançada o código seguinte não é executado,
    e o PHP tentará encontrar o primeiro bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> coincidente.
    Se uma exceção não for capturada, um erro PHP fatal será lançado com a mensagem
    &quot;<code class="literal">Uncaught Exception ...</code>&quot; na ausência de uma função
    definida com <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span>.
   </p>
   <p class="para">
    A partir do PHP 7.1 um bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> pode especificar múltiplas exceções
    usando o caractere pipe (<code class="literal">|</code>). Isto é útil quando
    diferentes exceções de diferentes hierarquias de classes são tratadas
    da mesma forma.
   </p>
   <p class="para">
    A partir do PHP 8.0.0, o nome de variável que captura a exceção é opcional.
    Se não especificada, o bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> compatível ainda executará, mas não
    terá acesso ao objeto lançado.
   </p>
  </div>

  <div id="language.exceptions.finally" class="sect1">
   <h2 class="title"><code class="literal">finally</code></h2>
   <p class="para">
    Um bloco <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> pode ser especificado após
    ou no lugar de blocos <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>. Códigos dentro de <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> sempre serão
    executados depois do <a href="language.exceptions.php" class="link"><code class="literal">try</code></a> ou <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>, independente se houve o
    lançamento de uma exceção, e antes que a execução normal continue.
   </p>
   <p class="para">
    Uma interação notável ocorre entre um bloco <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> e a instrução <a href="function.return.php" class="link"><code class="literal">return</code></a>.
    Se uma instrução <a href="function.return.php" class="link"><code class="literal">return</code></a> é encontrada dentro um bloco <a href="language.exceptions.php" class="link"><code class="literal">try</code></a> ou <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>,
    o bloco <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> ainda assim será executado. Além disso, a instrução <a href="function.return.php" class="link"><code class="literal">return</code></a> é avaliada
    no ponto que é encontrada, mas o resultado só será retornado após o bloco <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>
    ser executado. Se o bloco <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> também tiver uma instrução <a href="function.return.php" class="link"><code class="literal">return</code></a>,
    o valor da instrução de <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> que será retornado.
   </p>
   <p class="para">
    Outra interação notável é entre uma exceção lançada de dentro de um bloco <a href="language.exceptions.php" class="link"><code class="literal">try</code></a>
    e uma lançada de dentro de um bloco <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a>. Se ambos os blocos lançarem uma exceção,
    a que for lançada de dentro do bloco <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> será a propagada,
    e a lançada de dentro do bloco <a href="language.exceptions.php" class="link"><code class="literal">try</code></a> será usada como sua exceção anterior.
   </p>
  </div>

 <div id="language.exceptions.exception-handler" class="sect1">
  <h2 class="title">Manipulador de exceções global</h2>
  <p class="para">
   Se uma exceção alcança o escopo global, ela ainda pode ser capturada
   por um manipulador global de exceções, opcional. A função <span class="function"><a href="function.set-exception-handler.php" class="function">set_exception_handler()</a></span>
   pode configurar uma função que será chamada no lugar de um bloco <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a> na ausẽncia
   de outros blocos. O efeito é essencialmente o mesmo que ter o programa inteiro
   envelopado dentro de um bloco <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> e a função informada funcionando como o <a href="language.exceptions.php#language.exceptions.catch" class="link"><code class="literal">catch</code></a>.
  </p>
 </div>

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

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <p class="para">
     Funções internas ao PHP utilizam principalmente
     <a href="errorfunc.configuration.php#ini.error-reporting" class="link">aviso de erros</a>. Apenas extensões
     <a href="language.oop5.php" class="link">orientadas a objetos</a>
     utilizam exceções. No entanto, os erros podem ser transformados em
     exceções com <a href="class.errorexception.php" class="link">ErrorException</a>.
     Essa técnica não funciona para erros fatais.
    </p>
    <div class="example" id="example-1">
     <p><strong>Exemplo #1 Convertendo avisos de erros em exceções</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">Dica</strong>
    <p class="para">
     A <a href="book.spl.php#intro.spl" class="link">biblioteca padrão do PHP (SPL)</a> fornece
     várias <a href="spl.exceptions.php" class="link">exceções
     nativas</a>.
    </p>
   </div>
 </div>

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

   <div class="example" id="example-2">
    <p><strong>Exemplo #2 Lançando uma exceção</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">'Divisão por zero.'</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">'Exceção capturada: '</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">// A execução continua<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Olá mundo\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
0.2
Exceção capturada: Divisão por zero.
Olá mundo
</pre></div>
    </div>
   </div>
   <div class="example" id="example-3">
    <p><strong>Exemplo #3 Manipulação de exceções com bloco <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a></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">'Divisão por zero.'</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">'Exceção capturada: '</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">"Primeiro finaly.\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">'Exceção capturada: '</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">"Segundo finally.\n"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// A execução continua<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"Olá mundo\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
0.2
Primeiro finally.
Exceção capturada: Divisão por zero.
Segundo finally.
Olá mundo
</pre></div>
    </div>
   </div>
   <div class="example" id="example-4">
    <p><strong>Exemplo #4 Interação entre blocos <a href="language.exceptions.php#language.exceptions.finally" class="link"><code class="literal">finally</code></a> e <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>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
finally
</pre></div>
    </div>
   </div>
   <div class="example" id="example-5">
    <p><strong>Exemplo #5 Exceção aninhada</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">// 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">-&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>O exemplo acima produzirá:</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>Exemplo #6 Manipulação de múltiplas exceções no mesmo bloco catch</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>O exemplo acima produzirá:</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>Exemplo #7 Omissão da variável de captura de exceções</strong></p>
    <div class="example-contents"><p>Permitido a partir do PHP 8.0.0.</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">"Uma exceção SpecificException foi lançada, mas os detalhes não importam."</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

    <div class="example-contents"><p>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Uma exceção SpecificException foi lançada, mas os detalhes não importam.
</pre></div>
    </div>
   </div>
   <div class="example" id="example-8">
    <p><strong>Exemplo #8 Throw como uma expressão</strong></p>
    <div class="example-contents"><p>Permitido apenas no PHP 8.0.0 e posteriores.</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">'Não funcionou'</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">// Simula falha<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>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
Não funcionou
</pre></div>
    </div>
   </div>
   <div class="example" id="example-9">
    <p><strong>Exemplo #9 Exceção em bloco try e bloco 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">'Terceira'</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">'Quarta'</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">'Primeira'</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">'Segunda'</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>O exemplo acima produzirá:</p></div>
    <div class="example-contents screen">
<div class="cdata"><pre>
string(5) &quot;Primeira&quot;
string(6) &quot;Segunda&quot;
string(5) &quot;Terceira&quot;
string(6) &quot;Quarta&quot;
</pre></div>
    </div>
   </div>
  </div>

 

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