Novidades do PHP 7.1 – Parte 03 – Multi catch

php_logoBoa noite pessoal,

Hoje venho falar de outra novidade que virá no PHP 7.1, desta vez relacionada a mudanças na sintaxe da linguagem. Uma mudança relacionada ao famoso “try {} catch () {}”.

O que é exceção

Exceção, em linguagens de programação, devem ser lançadas quando há uma falha no fluxo de um determinado algoritmo. Por exemplo, em um calculo de divisão, não podemos dividir um número por zero. Com o lançamento de uma exceção conseguimos controlar qual comportamento nossa aplicação possuirá quando a mesma acontecer.

Exemplo de algoritmo com disparos de exceção

class DividendoNaoEncontradoException extends \Exception
{}

class DivisorNaoEncontradoException extends \Exception
{}

class DivisaoPorZeroException extends \Exception
{}

class Divisao
{
    public function dividir($dividendo, $divisor)
    {
        if (!is_float($dividendo)) {
            throw new DividendoNaoEncontradoException();
        }
        if (!is_float($divisor)) {
            throw new DivisorNaoEncontradoException();
        }
        if ($divisor == 0) {
            throw new DivisaoPorZeroException();
        }
        
        return $dividendo / $divisor;
    }
}

No exemplo acima, estou disparando disparando três exceções diferentes, sendo “DividendoNaoEncontradoException” quando o dividendo não for um número real, “DivisorNaoEncontradoException” quando um divisor não for um número real e “DivisaoPorZeroException” quando tentar realizar uma divisão por zero.

Exemplo de tratamento de exceção

$divisao = new Divisao();
try {
    $resultado = $divisao->dividir(10, 0);
} catch (DivisaoPorZeroException $e) {
    echo "Não é possível dividir por zero.";
}

No exemplo acima, estou tentando realizar uma divisão por zero e tratando sua exceção com para exibir uma mensagem para o usuário.

O que mudará no PHP 7.1

Até o PHP 7, uma chamada “catch” pode tratar somente uma única exceção. No PHP 7.1, será possível tratar múltiplas exceções em uma única chamada “catch”.

Exemplo de tratamento de múltiplas exceções até o PHP 7

$divisao = new Divisao();
try {
    $resultado = $divisao->dividir(10, 0);
} catch (DivisaoPorZeroException $e) {
    echo "Não é possível dividir por zero.";
} catch (DivisorNaoEncontradoException $e) {
    echo "Informe somente números reais.";
} catch (DividendoNaoEncontradoException $e) {
    echo "Informe somente números reais.";
}

Exemplo de tratamento de múltiplas exceções até o PHP 7.1

$divisao = new Divisao();
try {
    $resultado = $divisao->dividir(10, 0);
} catch (DivisaoPorZeroException $e) {
    echo "Não é possível dividir por zero.";
} catch (DivisorNaoEncontradoException | DividendoNaoEncontradoException $e) {
    echo "Informe somente números reais.";
}

Com essa mudança, podemos ter menos duplicidade de códigos quando duas ou mais exceções possuírem o mesmo comportamento no sistema.

Abaixo estou deixando o link oficial do RFC que está documentado essa mudança. Qualquer dúvida, não deixe de comentar.

Espero que tenham gostado. Até a próxima pessoal!

PHP 7.1 – RFC: Multi catch

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s