Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

try catch e finally

Seria uma boa pratica implementar esse tipo de coisa?

try {
    throw new Exception("Erro ao fazer operação no banco de dados", 1);
}catch(Exception $e){
    echo $e->getTraceAsString();
    throw $e;
}
finally{
    echo "Fechou a conexao com o banco de dados\n";
}
4 respostas

Olá Pablo, Geralmente usamos "try" e "catch", colocamos o código dentro do "try" e capturamos as exceções dentro do "catch", o "finally" vai sempre executar independente se houve uma exceção.

<?php
function inverse($x) {
    if (!$x) {
        throw new Exception('Divisão por zero.');
    }
    return 1/$x;
}

try {
    echo inverse(5) . "\n";
} catch (Exception $e) {
    echo 'Exceção capturada: ',  $e->getMessage(), "\n";
} finally {
    echo "Primeiro finaly.\n";
}

try {
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Exceção capturada: ',  $e->getMessage(), "\n";
} finally {
    echo "Segundo finally.\n";
}

// Execução continua
echo "Olá mundo\n";
?>
O exemplo acima irá imprimir:

0.2
Primeiro finally.
Exceção capturada: Divisão por zero.
Segundo finally.
Olá mundo

Exemplo na documentação PHP https://www.php.net/manual/pt_BR/language.exceptions.php

Não entendi muito bem sua dúvida, Pablo.

Eu percebi que me expressei um pouco mal, eu queria dizer que se seria uma boa prática fechar as conexões cuja query por acaso falhou, eu percebi no finally um bom jeito de fazer isso, mas nada impede de fazer no catch, todavia o finally parece ser algo mais "correto", eu queria saber se isso pode ser considerado uma boa prática na hora da codificação

solução!

Aahh, sim. O finally serve exatamente pra isso. Executar um código que é necessário independente de sucesso ou erro dos códigos anteriores. Fechar conexão, arquivo, liberar recursos no geral é um bom caso de uso pro finally.