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 :

{Try Catch} break ? [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Points : 329
    Points
    329
    Par défaut {Try Catch} break ?
    Bonjour,
    je suis sous PHP 5.3.8.

    Voici un code plus que trivial:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    try{
       //1
       copy_directory($src."/",$dist);
       //2        
       echo 'test';
     
    }
    catch (Exception $e)
    {
     
        echo 'Exception caught: ',  $e->getMessage(), "\n";
     
    }
    1 -> erreur de copie d'un fichier provoquée volontairement

    2-> le code echo s’exécute quand même

    J'ai du rater un épisode, mais normalement à la moindre erreur, cela doit passer dans le catch et ignorer les lignes suivantes non ?

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Seules les exceptions lancées sont catchées. Une erreur est une erreur, une exception est une exception ; il ne faut pas confondre.


    Si, copy_directory() est comme ça, ça passe dans le catch :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function copy_directory(){
       throw new Exception('oops');
    }
    Si c'est comme ça, ça ne le fait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function copy_directory(){
       return copy(11); // retourne false et lance une erreur car le nb d'argument est erroné.
       // return false;
    }

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    A noter qu'il est possible en PHP de remplacer les erreur par des exceptions en utilisant conjointement la classe ErrorException et set_error_handler.

  4. #4
    Membre averti Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Points : 329
    Points
    329
    Par défaut
    Je me demande pourquoi j'ai eu un pouce en bas sur mon premier message...
    Enfin bref, j'ai était trop bien(ou mal) habitué avec Python qui lui réagissais au moindre problème.

    Je ne souhaite pas traiter l'erreur/exception, seulement la détecter. Donc la solution de transformer les erreurs en exceptions me semble la meilleure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function exception_error_handler($errno, $errstr, $errfile, $errline ) {
       throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    }
    set_error_handler("exception_error_handler");
    Voila ce code permet d'associer les erreurs à des exceptions.
    En revanche, je n'ai pas compris la place du "0" dans le constructeur ça correspond à "int code".

    http://php.net/manual/en/class.errorexception.php

  5. #5
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Une exception possède un message et un code accessible par des méthodes.
    Et ça en JAVA et en PHP (et normalement tout langage objet qui se restecp)

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

Discussions similaires

  1. Builder n'accepte pas try/catch/__finally
    Par Rodrigue dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/04/2005, 14h15
  2. __try __finally et try catch
    Par buzzz dans le forum C++
    Réponses: 6
    Dernier message: 19/02/2005, 16h31
  3. [debutant sous eclipse] surround with try catch
    Par Alwin dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/06/2004, 21h03
  4. [try-catch] relancer les instruction du bloc try
    Par nounou dans le forum Langage
    Réponses: 11
    Dernier message: 12/05/2004, 12h23
  5. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 16h35

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