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 :

solution pour insérer plusieur throw dans try catch


Sujet :

Langage PHP

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut solution pour insérer plusieur throw dans try catch
    Bonjour,

    Aujoud'hui je test les try catch

    j'ai essayer ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    try
    {
    throw ...
     
    throw ..
     
    throw ...
    }
    catch(Exception $e)
    {
        $erreur = $e->getMessage();
    }

    en faisant ce code je me suis aperçu qu'il ne collecte qu'une seul erreur.

    j'ai essayer cette class pour tenter d'arriver à utiliser plusieurs throw

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    <?php
     
    //var_dump($_SESSION['membre']);
    extract($_POST);
     
     
    $verif = new Verif();
    $verif->test('email', $email);
    $verif->test('pass', $pass);
     
    $erreur =$verif->getCatch();
    print_r($erreur);
     
    class Verif {
     
        private $catch=array();
     
        public function __construct() {
     
        }
     
        public function test($condition, $a_verifier) {
     
            try {
     
               if($condition == 'email')
               {
                if (strlen($a_verifier) < 4)
                {
                    throw new Exception("email pas valide");
                }
               }
     
                if($condition == 'pass')
               {
                if (strlen($a_verifier) < 8)
                {
                    throw new Exception("pass pas bon");
                 }
               }
     
     
            } catch (Exception $e) {
                $this->catch[] = $e->getMessage();
            }
        }
     
        public function getCatch()
        {
            return $this->catch;
        }
     
    }
     
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    ?>
    pensez-vous que je fais correctement les choses ?
    ou il y une solution plus rapide et simple à comprendre
    je ne trouver pas pratique de trouer des try partout....

    merci d'avance pour vos suggestion

  2. #2
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Le try catch n'a pas vraiment d'utilité dans ce cas car tu veux que le code continu de s'exécuter pour récupérer toutes les erreurs....

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci de ta réponse

    j'ai donc pas saisie le try catch.
    le try catch ne sert qu'a récupérer les erreurs et empêcher l'exécution de celui ci?

    dans mon cas s'il y avais un test par exemple comme dans la doc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $x = 0/3;
        if (!$x) {
            throw new Exception('Division par zéro.');
        }
     
    echo "autre test";
    si on présente une variable qui a une division par 0,
    une erreur est lancer mais le programme continue mais
    le fait pas l'opération...je verrais autre test

    si je ne mets pas de try catch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $x = 0/3;
        if (!$x) {
           echo "??";
        }
     
    echo "autre test";
    il va exécuter la division et le programme continue avec cette erreur

    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
     
    <?php
    try
    {
    $x = 0/3;
        if (!$x) {
            throw new Exception('Division par zéro.');
        }
     
    //$y = 0/5;
     
        if (!$y) {
            echo "erreur";
        }
    }
     catch (Exception $e)
     {
         echo $e->getMessage();
     }
    echo "X" ; var_dump($x); //x = 0
     
    echo "Y";var_dump($y); //y = null

  4. #4
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    Heuu non.

    En fait, tu l'utilise pour remonter les erreurs aux fonction appelantes. C'est très pratique car ça t'évite je gérer un booléen pour la valeur de retour de test fonctions....

    exemple sans try catch :

    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
     
    $err = maFonction();
    if(!$err){
       echo 'ok';
    }
    else{
       echo 'ko';
    }
     
    function maFonction(){
       $erreur = false;
       if($problem){
          $erreur = true;
       }
     
     
       if(!$erreur){
           if($autreProblem){
              $erreur = true;
          }
       }
       return $erreur;
    }

    exemple avec try catch :

    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
     
    try{
        maFonction();
        echo 'ok';
    }
    catch($Exception){
       echo $Exception->getMessage();
    }
     
    function maFonction(){
       if($problem){
          throw new Exception('ko1');
       }
     
       if($autreProblem){
          throw new Exception('ko2');
       }
    }
    Conclusion:
    - Code plus lisible
    - Débugage plus facile
    - Gestion des erreurs plus souple
    - Laisse la possibilité de r'envoyer des données en retour de fonction

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    ok tu m'a donnée un bon exemple pour comprendre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/07/2014, 11h47
  2. [MySQL] Insert et select pour insérer plusieurs lignes dans table
    Par Khof59 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/05/2014, 21h19
  3. Réponses: 11
    Dernier message: 31/01/2013, 10h56
  4. Réponses: 15
    Dernier message: 08/09/2010, 13h50
  5. Code pour insérer plusieurs valeurs dans une cellule
    Par azerty1956 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/03/2009, 13h09

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