Médiaforma

All posts tagged exceptions

Modifiez le code pour que la valeur 1/3 soit également calculée.

Solution

Faites une pause dans la vidéo et modifiez le code. Poursuivez la vidéo pour prendre connaissance de la solution.

Pour que le troisième calcul soit toujours effectué, il suffit de placer l’appel à la fonction inverse(3) à l’extérieur du bloc catch.

Chronologiquement, on calcule :

  • L’inverse de 12,
  • L’inverse de 0. Ce calcul est protégé par la structure try catch. Une exception est détectée et un message d’erreur est affiché dans le bloc catch.
  • Le programme se poursuit alors par les instructions à l’extérieur du try. C’est ainsi que l’inverse de 3 est calculé.

 

Voici le code à utiliser :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Gestion des exceptions avec bloc finally</title>
  </head>
  <body>
    <?php
      function inverse($nombre){
        if ($nombre == 0)
          throw new exception("division par zéro");
        else
          echo "1/$nombre = ".(1/$nombre)."<br>";
      }
      echo inverse(12);
      try{
        echo inverse(0);
      }
      catch(exception $e){
        echo "Une exception a été générée : ".$e->getMessage()."<br>";
      }
      echo inverse(3);
    ?>
  </body>
</html>

 

 


La gestion des exceptions dans PHP est comparable à celle qui a cours dans les autres langages de programmation :

  • Le code qui peut provoquer une exception doit être entouré d’une structure try.
  • Une exception peut être déclenchée par l’instruction suivante :
     throw new Exception("message");
  • L’instruction catch(exception $e) permet de capturer une exception. Si une instruction throw new Exception a été générée, le message peut être récupéré dans la cellule
     $e->getMessage() du tableau $e.
  • Chaque instruction try doit avoir une instruction catch correspondante.

Un exemple va mettre en pratique tout ce qui vient d’être dit :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Gestion des exceptions</title>
  </head>
  <body>
    <?php
      function inverse($nombre){
        if ($nombre == 0)
          throw new exception("division par zéro");
        else
          echo "1/$nombre = ".(1/$nombre)."<br>";
      }
      try{
        echo inverse(12);
        echo inverse(0);
        echo inverse(3);
      }
      catch(exception $e){
        echo "Une exception a été générée : ".$e->getMessage()."<br>";
      }
    ?>
  </body>
</html>

Faites une pause dans la vidéo et saisissez ce code le code.

Voici quelques explications sur le code que vous venez de saisir.

Les instructions dont l’exécution est incertaine sont placées dans le bloc try. Ici, on essaye de calculer 1/12, 1/0 puis 1/3

 

Examinons la fonction inverse.

Si le nombre passé en entrée est égal à 0, l’exception “Division par zéro” est générée.

Dans le cas contraire, l’inverse du nombre passé à la fonction est retourné.

Lorsqu’une exception se produit, les instructions du bloc catch sont exécutées puis le programme s’interrompt.

Exécutons ce code via WAMPServer.

Comme vous pouvez le vérifier :

  • la première fraction est calculée
  • la deuxième fraction provoque l’affichage d’un message d’erreur
  • la troisième fraction n’est jamais exécutée car le programme a été interrompu.