Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Cristal escuro
Por iz@bel
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Artigo

Tratamento de exceções do PHP: uma introdução para iniciantes
Linux user
everton3x
31/03/2011
O PHP possui um controle de exceções muito similar a outras linguagens de programação, fazendo com que o tratamento de exceções seja uma ferramenta muito interessante para os usuários da linguagem. Este artigo trata do controle e tratamento de exceções do PHP utilizando uma linguagem simples voltada para aqueles que não conhecem nada do assunto.
Por: EVERTON DA ROSA | Blog: http://everton3x.orgfree.com/
[ Hits: 7668 ]
Conceito: 6.7   3 voto(s)3 voto(s)3 voto(s)3 voto(s)3 voto(s) + quero dar nota ao artigo

Introdução

Como este artigo é voltado para iniciantes que não sabem nada (relativamente ou absolutamente) sobre exceções, é primordial que se defina o que é exceção no PHP.

Exceção pode ser entendida como um "erro" que ocorre durante a execução de um script PHP. Esse "erro" pode ser um erro próprio do PHP como, por exemplo, quando se tenta incluir um arquivo inexistente através de include(), ou um "erro" gerado propositalmente pelo script, como, por exemplo, quando informamos o usuário ou senha errados num script de login.

Para clarear isso, vamos fazer um exemplo:

<?php
        try {
            if(!mysql_connect('localhost', 'root', '')){
                throw new Exception('Erro na conexão');
            }else{
                echo 'Conexão concluída';
            }
        }catch (Exception $e){
            echo $e->getMessage();
        }
?>

O que o código acima faz é tentar conectar com um servidor MySQL. Se a conexão ocorrer, a mensagem "Conexão concluída" será mostrada, senão, uma exceção será disparada pela linha throw new Exception('Erro na conexão'); e o bloco "catch" será chamado.

No nosso exemplo, o bloco "catch" apenas irá imprimir a mensagem "Erro na conexão", que foi definida no comando "throw".

Um iniciante poderá dizer: não existe uma maneira de fazer isso com blocos "if"? Sim, é possível, porém convém lembrar que estamos trabalhando com um exemplo muito, muito simples. Em scripts mais elaborados e complexos, tratar "erros" com blocos "if" pode se tornar extremamente complexo.

Próxima página >>




Páginas do artigo
   1. Introdução
   2. Um exemplo um pouco mais complexo
   3. TRY/CATCH é melhor que IF/ELSE?
   4. Conclusão

Outros artigos deste autor

Leitura recomendada

Comentários
[1] Comentário enviado por ./.ronin em 03/04/2011 - 23:37h:

Veja que é só uma dica:

$login =@ $_REQUEST['login']; // suprime erros de tela

try {
if ( $login ) {
echo 'Ok';
}
else{
throw new Exception('Falhou', 0);
}
catch( Exception $e ) {
echo $e->getMessage();
}
...bla, bla, bla

[2] Comentário enviado por everton3x em 04/04/2011 - 08:08h:

Grato ./.ronin!
O símbolo @ suprime a exibição de mensagens de erro do PHP.

[3] Comentário enviado por jmurray em 08/04/2011 - 08:29h:

Cara, dar comando GOTO em código php é uma péssima prática de programação. Creio que seria mais conveniente você colocar essa validação em uma classe que trata os dados de login e colocar um flag dizendo se a validação foi bem sucedida.

Sua intenção ditática é bem intencionada, mas creio que você deve dar uma melhorada no seu estilo de programar ! GOTO == spaghetti code

[4] Comentário enviado por everton3x em 08/04/2011 - 11:17h:

Caro jmurray:
Concordo com você que GOTO em PHP é péssima idéia, visto que existem formas melhores para substitui-lo. Entretanto:
1º - Como você mesmo disse: é um código didático.
2º - Não utilizo GOTO em meus códigos não-didáticos e mesmo nos didáticos, esta foi a primeira vez, visto que não conhecia este comando.
3º - Obrigado pela crítica.

[5] Comentário enviado por Ragen em 08/04/2011 - 22:03h:

@everton3x, vou fazer uma crítica aqui e espero que seja encarada como construtiva.

Quando alguém vai fazer uma introdução Especialmente para iniciantes, o assunto discutido tem que muito bem dominado e conhecido - por que tem coisa pior que influenciar iniciantes a estudar ou fazer coisas pelo método errado/não adotar as boas práticas de programação?

Todavia, toda ação de compartilhar é bastante apreciada e é por conta dela que essa comunidade existe. Fica os parabéns pela iniciativa de produzir o material.

Abraco

[6] Comentário enviado por everton3x em 09/04/2011 - 08:23h:

Obrigado pela crítica Ragen, talvez eu tenha "errado a mão" um pouco neste texto. Vou me policiar mais nas próximas vezes.

[7] Comentário enviado por fmpfmp em 11/04/2011 - 13:37h:

Interessante, eu praticamente não uso try/catch em PHP. A maior vantagem que eu vejo é quando você tem muitas condições a serem checadas. Então você precisaria de vários if/else onde apenas um try resolveria. Em compensação você não tem controle das condições que estão erradas porque ele pega a primeira que vier e vai direto pro catch.

[8] Comentário enviado por ./.ronin em 11/04/2011 - 18:55h:

E uso muito try/catch em POO: Setters methods para throws e desvios condicionais e getters methods para try/catchs.

Entretanto ele é muito interessante para controle da saida de erros conhecidos. Eu costumo chamar esse recurso de programação orientada a erros... Mas ele deve ter um outro nome...

[9] Comentário enviado por everton3x em 11/04/2011 - 20:00h:

./.ronin:

Que tal colocar uns exemplos pra gente dar uma olhada?


Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.