php questão de manipulação de exceção

votos
0

Estou simplesmente tentando colocar uma expressão aritmética em torno do bloco try-catch.

Aqui está o que eu tentei:

    try 
    {
        $result = 4/0;
    } 
    catch (Exception $e)
    {
        d($e->getMessage());
    }

Mas em vez de impressão $e->getMessage(), ele está exibindo Internal Server Error Division By Zeroo que é semelhante, se eu não usar qualquer try-catch.

O que estou fazendo de errado?

Publicado 20/09/2018 em 04:26
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Você não pode pegar DivisionByZeroError na aritmética normal, porque PHP considera um aviso, não um erro. Em vez disso, é necessário definir um manipulador de erro de olhar para ele por exemplo,

function handler($errno, $error) {
    if ($error == "Division by zero") {
        echo "Error $errno! $error\n";
        return;
    }
    // hand processing back to the standard handler
     return false;
}
set_error_handler('handler');
$result = 4/0;

Saída:

Error 2! Division by zero

Note-se que o manipulador de erro deve retornar controle para o manipulador padrão (retornando false) se este não é o erro que você estava procurando.

Respondeu 20/09/2018 em 04:37
fonte usuário

votos
1

Você tem que usar este:

try 
{
    $result = intdiv(4, 0);
}
catch(DivisionByZeroError $e)
{
    d($e->getMessage());
}

Manual do PHP: http://php.net/manual/en/class.divisionbyzeroerror.php (Funciona com PHP 7em diante)

Update: Usando intdiv()- divisão Integer (Funciona com PHP 7em diante)

Respondeu 20/09/2018 em 04:31
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more