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

[Dúvida] Exceções e Erros

Olá,

Durante a aula eu me questionei: por que a operação de acessar um indice inesistente é do tipo runtime exception e a divisão por zero é um erro? Sendo que ambos os problemas são gerados em tempo de execução, pois sintaticamente estão corretos? Por que não são do tipo runtime? Não faria mais sentido?

Abraços!!!

2 respostas

Boa noite!

É porque existem vários níveis de erro, no caso de índice inexistente é um erro de nível menor do que uma divisão por zero.

Ou seja, existem erros que aparecem como Runtime, Warning, Notice, etc...

Já erros do tipo divisão por zero são fatais (geralmente), e esses tipos interrompem a execução completa do programa, já erros de falta de alguma variável ou índice geralmente não interrompem a execução da aplicação, e geram uma cascata de erros (dependendo do caso) até chegar ao fim da execução ou atingir um erro fatal.

A simplificação de que ambos ocorreram na execução, não considera os diversos tipos de erro que podem ocorrer durante o fluxo. Diferente de erros de sintaxe e parse que costumam ocorrer antes mesmo de iniciar a execução.

Tipos de erro

Inclusive você pode configurar quais erros deseja exibir, utilizando as constantes pré-definidas: https://www.php.net/manual/pt_BR/errorfunc.constants.php

isso é feito usando o php.ini ou o error_reporting: https://www.php.net/manual/pt_BR/errorfunc.configuration.php#ini.error-reporting

Mas perceba uma coisa, colei abaixo a lista de erros que podemos controlar a exibição, observe que podemos até ignorar qualquer erro, menos os do tipo fatal.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadePS: Os valores dos erros (à esquerda) é a representação deles em inteiro, perceba que crescem de 2 em 2, para possibilitar o uso de operadores bitwise, como ~E_ALL, onde no caso o operador é o ~. https://www.php.net/manual/en/language.operators.bitwise.php

Segue uma explicação detalhada sobre bitwise e o uso em PHP: https://www.youtube.com/watch?v=UQ5L-eoBV6Q

solução!

por que a operação de acessar um indice inesistente é do tipo runtime exception e a divisão por zero é um erro?

Respondendo de forma objetiva, os diferentes erros foram decisões de design dos desenvolvedores do PHP. :-)

Quem criou a funcionalidade da SplFixedArray escolheu lançar uma exceção do tipo RuntimeException enquanto quem criou a funcionalidade da função intdiv escolher lançar um erro. Isso não afeta como lidamos com o código, já que ambos são "recuperáveis" via try catch. :-D