No exemplo anterior, utilizamos o comando throw para lançar uma exceção 
                explicitamente. Em alguns momentos, o tratamento da exceção não pode, por algum 
                motivo, ser tratada em seu respectivo bloco catch.
            
            
                Nessa situação acima, podemos relançar uma exceção para um escopo 
                superior, para seu tratamento, utilizado o mesmo comando throw.
            
            Sintaxe
            
try
{
    //código
}
catch(tipo_excecao $nome_objeto) 
{
    throw $nome_objeto; //relançando exceção
}
            Exemplo 5
            
<?php
    function funcao1(){
        funcao2();
    }
    
    function funcao2(){
        funcao3();
    }
    function funcao3(){
        try { 
            $var = 10/0;
        }
        catch(Exception $ex){
            throw $ex;
        }
    }
    
    try
    {
    	funcao1();
    }
    catch(DivisionByZeroError $ex)
    {
    	echo "__toString: ",$ex->__toString(),"\n";
    }
?>
            Saída
            
ERROR!
__toString: DivisionByZeroError: Division by zero in /tmp/exLM74wetK.php:11
Stack trace:
#0 /tmp/exLM74wetK.php(7): funcao3()
#1 /tmp/exLM74wetK.php(3): funcao2()
#2 /tmp/exLM74wetK.php(19): funcao1()
#3 {main}
            
                Caso uma nova exceção seja lançada ou invés de relançada, as informações do stacktrace referentes ao
                erro anterior serão perdidas, "mascarando" assim o erro.