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 :

Exception throw catch try [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 220
    Par défaut Exception throw catch try
    Bonjour,

    Je n'ai pas très bien compris le code suivant :
    Voir ici http://fr.php.net/manual/fr/language.exceptions.php

    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
    <?php
    function inverse($x) {
     
    // !$x veut dire ... ?
        if (!$x) {
     
    		// On lance une exception avec "throw new"
    		// Lorsqu'une exception est jetée, le code suivant 
    		// le traitement ne sera pas exécuté et PHP tentera 
    		// de trouver le premier bloc catch correspondant.
    		// Ici, on a jeté l'exception "Exception".
        	throw new Exception('On ne peut diviser par zéro.');
        }
        else return 1/$x;
    }
     
    // Je ne comprends pas ce try? C'est quand il n'y a pas d'exception lancée?
     
    try {
     
        echo inverse(5) . "\n<br/>";
        echo inverse(0) . "\n";
    	}
     
    // L'exception "Exception" est attrapée par "catch ()"
    // $e->getMessage() permet de retourner le contenu de l'exception.
    // qui n'est pas forcément une message.
     
    catch (Exception $e) 
    	{
        echo 'Exception reçue : ',  $e->getMessage(), "\n";
    	}
     
    // Je ne comprends pas très bien ceci : "Le code devra être entouré d'un bloc
    // try pour faciliter la saisie d'une exception potentielle."
    ?>

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    !$x signifie Not $x, vrai si $x n'est vrai.
    En l'occurrence, ça sert à repérer les cas où $x vaut 0. En php, tous les nombres différents de 0 sont TRUE et 0 est False.

    Quand on veux faire quelque chose qui est susceptible de nous exploser à la tête (<=> renvoyer une exception), on essaye de le faire (<=> on le place dans le bloc try).
    Si tout se passe bien, pas de problème, on continue sur sur le code situé après l'ensemble try/catch.
    Si une des instructions qu'on a mis dans le try jette une exception, on arrête là. Le catch attrape l'exception jetée, déroule les instructions qui se trouve dans le bloc catch, puis continue sur le code situé après l'ensemble try/catch.

    Plus claire comme ça ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par Celira Voir le message
    !$x signifie Not $x, vrai si $x n'est vrai.
    En l'occurrence, ça sert à repérer les cas où $x vaut 0. En php, tous les nombres différents de 0 sont TRUE et 0 est False.
    Plus claire comme ça ?
    Salut Celira,
    juste une précaution qui me parait non négligeable, sur l'existance on peut étre OK .
    Sur 0 surtout pas .... le cas d'école,
    je cherche "a" dans "abcd"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
    $mystring = 'abc';
    $findme   = 'a';
    $pos = strpos($mystring, $findme);
    if ($pos === false) {    echo "pas de a";} else 
    {  echo "a est en position ".$pos."";}
    le triple === parant le cas de confusion entre false et position=0 !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 220
    Par défaut
    J'ai modifié mon code.
    Vous me direz si vous êtes d'accord.
    Par contre cela ne fonctionne plus si je change
    le "throw new Exception" en "throw new EZ"
    et que je remplace le "catch Exception" en "catch EZ".
    Je pensais que l'on pouvait mettre un autre nom.

    Fatal error: Class 'EZ' not found in C:\wamp\www\PHP\_poo_59_try_catch_throw_.php on line 19

    Pourquoi?

    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
    <?php
     
    // throw : lancer
    // try : essayer
    // catch : attraper
     
    function inverse($x) {
     
    // !$x veut dire "NOT $x" c-à-d $x est "FALSE" donc si $x est égal à 0.
    // Un tout autre nombre que 0 donnera une valeur "TRUE".
     
        if (!$x) 
        {
        	// On lance une exception avec "throw new"
    		// Lorsqu'une exception est jetée, le code suivant 
    		// le traitement ne sera pas exécuté et PHP tentera 
    		// de trouver le bloc catch correspondant.
    		// Ici, on a jeté l'exception "Exception" donc un catch "Exception" va l'attraper.
        	throw new Exception('On ne peut diviser par zéro.');
        	echo 	'Une fonction après un throw n\'est jamais exécutée.<br\> 
        			Il est donc inutile de mettre un die, un exit ou un return.';
        }
        else return 1/$x;
    }
     
    // On ouvre un bloc try-catch quand des exceptions sont prévisibles.
    // Par exemple, lorsqu'une base de données est momentanément inaccessible.
     
    // Ici, la valeur $x=0 va provoquer (jeter) l'exception "Exception".
    // Cette exception "Exception" sera attrapée par la fonction catch "Exception".
     
    try {
     
        echo inverse(5) . "<br/>";
        echo inverse(0);
    	}
     
    // $e->getMessage() permet de retourner le contenu de l'exception.
    // qui n'est pas forcément une message.
     
    catch (Exception $e) 
    	{
        echo 'Exception reçue : ',  $e->getMessage();
    	}
    ?>

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Les exceptions sont des objets, implémentant la classe Exception. Donc forcément si tu mets autre chose ça explose Seul moyen : écrire tes propres classes d'exception, en les faisant hériter de la classe Exception par défaut.

    Un tuto sur le sujet : Exceptions et PHP5 et toujours la Faq
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    220
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 220
    Par défaut
    D'accord.

    Merci pour tout.

    PS C'est mieux de vous dire "merci" et de mettre en "résolu";
    ou de mettre en "résolu" immédiatement afin de ne pas lancer une réponse qui vous fait perdre un peu de temps?

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

Discussions similaires

  1. solution pour insérer plusieur throw dans try catch
    Par keokaz dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2013, 18h39
  2. Comment définir l'exception dans un try/catch
    Par christophe_halgand dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/01/2013, 09h25
  3. try throw catch
    Par ETVigan dans le forum Langage
    Réponses: 3
    Dernier message: 20/05/2010, 15h31
  4. [PHP 5.3] try - throw - catch
    Par ETVigan dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2010, 19h43
  5. Pb : Exception / déroutements / try, throw, catch
    Par Bapt_from_Reims dans le forum C++
    Réponses: 5
    Dernier message: 18/03/2005, 17h55

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