IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Propagation des exceptions


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 53
    Points : 53
    Points
    53
    Par défaut Propagation des exceptions
    Bonjour tout le monde,

    J'ai cherché, il me semble que ça n'existe pas "nativement" mais existe-t-il un moyen simple de propager une exception vers la fonction appelante tel en Java avec le mot clé "throws".


    Et autre que cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function foo()
    {
       try {
           bar();
       }
       catch( Exception $e)
       {
          throw $e;
       }
    }

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Non, il faut faire comme tu as fait

  3. #3
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonsoir,

    Si c'est possible, comme tu l'as fait, l'exception envoyée par bar() remonte dans foo(). (bar() thrown exception is catched by foo()).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function foo()
    {
        try{
            bar(); // throw exception
        }catch(Exception $e){
            echo $e->getMessage();
        }
    }
    
    function bar(){
        if(!count(func_get_args()){
            throw new Exception('Missing argument exception');
        }
    }
    Il faut éviter les multiples imbrications de try / catch. Try catch est très couteux, il met en mémoire l'ensemble du code de son bloc à chaque fois.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 53
    Points : 53
    Points
    53
    Par défaut
    Oui, enfin je ne cherche pas à remonter d'un rang mais à faire remonter l'exception détectée dans foo dans la fonction qui aurait appelé foo (ou plus haut encore). Dans le sens où foo ne s'occupe pas du tout de la gestion des erreurs, elle ne fait que remonter l'erreur à la fonction appelante.

    Par exemple en Java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    class Test {
     
       static void bar2() throws Exception
       {
            throw new Exception("Problème");
       }
     
       static void bar1() throws Exception
       {
            bar2();
       }
     
       static void foo() throws Exception
       {
            bar1();
       }
     
       public static void main(String args[]) {
           try {
               foo();
           }
           catch( Exception e ) { 
               // gestion de l'exception
           }
       }
     
    }
    L'erreur générée par bar2() est gérée par main.

  5. #5
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Je fais fais exactement la même chose dans mon exemple précédent.

    Mais en fait si je comprends bien, tu cherches à tout imbriquer dans un bloc try/catch (puisque tu veux être capable de tout catché). Pour cela tu peux mettre un énorme try/catch autour de ton bloc de code principale (genre ton fichier index.php).

    Je me trompe ?

Discussions similaires

  1. [Exception] Propagation des exceptions
    Par Rayek dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2007, 16h59
  2. [ORACLE 9i] Gestion des exceptions
    Par sygale dans le forum SQL
    Réponses: 6
    Dernier message: 19/08/2004, 15h06
  3. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo