Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia pessoal, minha dúvida é a seguinte, estou fazendo testes com try/catch em php mas aparentemente ele não está funcionando, não sei se é erro de conceito meu...
bom abaixo segue o código
<?php $um = 1; $zero = 0; try { echo $um/$zero; } catch(Exception $e) { echo "Ocorreu o erro $e"; }?>
Como visto, ele vai dar um erro, pois o código está dividindo por zero, sendo assim ele deveria imprimir a mensagem "Ocorreu o erro...", porém ele nunca entra nessa parte do código...
Alguém sabe pq ele não entrou no bloco da exceção?
Não está somente dando erro em calculo matemático, para conectar no mysql tbm não funciona...
<?php try { $conexao = mysql_connect("localhost", "root", ""); } catch(Exception $e) { echo "Ocorreu o erro $e"; }?>
Tens como me dar um exemplo de como ele entra no catch???
try{ throw new Exception('Oops!! Ocorreu um erro');}catch (Exception $e){ echo $e->getMessage();}de uma olhada
http://br.php.net/manual/pt_BR/language.exceptions.php
Só explicando melhor o exemplo do MagicalTrevor, você somente pode pegar (catch) uma exceção após dispará-la (throw), por isso que seu c'odigo n~ao pegava a exce'c~ao. ;)
Abra'cos,
Beraldo
ahh pode crer...eu confundi com o bloco do javascript... que n precisa dar throw pra cair no catch...O.o burrao =XX!!!
Pois é, achei meio ilógico o programador sempre ter que gerar a excessão na mão para pegar no catch... Em outras linguagens como .net, java e javascript como o nosso amigo MadPatryk colocou o engine da linguagem gera a excessão automaticamente...
Não vejo muita vantagem usar o try/catch para pegar excessões, vou continuar usando as técnicas vindas do passado do php, o velho e útil if (!$variavel) que é totalmente procedural e contra programação OO...
Mas é isso ai... ( mesmo assim, o php continua sendo a melhor linguagem para desenvolvimento WEB)
Valeu pessoal!!!
Isso acontece porque o php é configurado para sempre retornar erro e não excessão.
Para que o try/catch funcione você tem que invocar uma excessão para este evento, o que muitas vezes é mais facil você testar se vai dar erro antes.
No caso do seu código.
<?php
$um = 1;
$zero = 0;
try {
echo $um/$zero;
} catch(Exception $e) {
echo "Ocorreu o erro $e";
}
?>é mais facil você testar se a variavel $zero é nula ou zero
<?php
$um = 1;
$zero = 0;
if(!$zero)
echo $um/$zero;
else
echo "Variavel $zero não pode ser zero";
?>Mais se mesmo assim, há casos que necessitamos de excessão. Neste caso
<?php
try {
if (!$zero)
throw new Exception('Division by zero.');
echo $um/$zero;
}
catch (Exception $e) {
echo "<br>Ocorreu uma excessão: " . $e->getMessage();
}
echo "<br>Passou pela Excessão sem perda do projeto";
?>Mais veja que neste caso você usou muito mais programação e esta usando muito mais memória e processamento para retornar o mesmo efeito.
Então a dica final é: Analise cada caso. Cada caso é um caso diferente e deve ser tratado diferente.
acho que erros de aritimética o php nao pega...só qdo você tenta instanciar um obj inexistente, etc...:)