PHP Exception Handling


PHP Exception Handling

Des exceptions sont utilisées pour modifier l'écoulement normal d'un script si une erreur se produit spécifié.

Qu'est-ce qu'un Exception

Avec PHP 5 est venu d'une manière orientée objet nouveau de traiter les erreurs.
La gestion des exceptions est utilisée pour changer le flux normal de l'exécution de code si une erreur spécifié (exceptionnelle) survient. Cette condition est appelée une exception. C'est ce qui arrive normalement quand une exception est déclenchée:

  • Le code d'état en cours est enregistrée
  • L'exécution de code passe à un modèle prédéfini (personnalisé) la fonction gestionnaire d'exception
  • Selon la situation, le gestionnaire peut alors reprendre l'exécution de l'état du code sauvé, mettre fin à l'exécution du script ou de continuer le script à partir d'un autre emplacement dans le code
Nous allons montrer les différentes méthodes de gestion des erreurs:
  • L'utilisation de base des exceptions
  • Création d'un gestionnaire d'exception personnalisée
  • Exceptions multiples
  • Re-levée d'une exception
  • Définition d'un gestionnaire de haut niveau exception
Remarque: Les exceptions ne doivent être utilisés avec des conditions d'erreur, et ne doit pas être utilisée pour sauter à un autre endroit dans le code en un point spécifié.

Utilisation de base des exceptions

Quand une exception est levée, le code suivant ne sera pas exécuté et PHP tentera de trouver la correspondance "catch" bloc.
Si une exception n'est pas attrapé, une erreur fatale sera émise avec une "Exception non rattrapée" message.
Essayons de lever une exception sans l'attraper:
<?php
//create function with an exception
function checkNum($number)
  {
  if($number>1)
    {
    throw new Exception("Value must be 1 or below");
    }
  return true;
  }

//trigger exception
checkNum(2);
?>
Le code ci-dessus obtiendrez une erreur comme ceci:
Fatal error: Uncaught exception 'Exception'
with message 'Value must be 1 or below' in C:\webfolder\test.php:6
Stack trace: #0 C:\webfolder\test.php(12):
checkNum(28) #1 {main} thrown in C:\webfolder\test.php on line 6

Essayez, lancer et attraper

Pour éviter l'erreur de l'exemple ci-dessus, nous avons besoin pour créer le code approprié pour gérer une exception.
Code d'exception appropriée doit inclure:
  1. Essayez - Une fonction utilisant une exception devrait être dans un "try" bloc. Si l'exception ne se déclenche pas, le code continuera comme d'habitude. Toutefois, si l'exception se déclenche, une exception est «jeté»
  2. Jetez - Voilà comment vous déclenchez une exception. Chaque "lancer" doit avoir au moins un «catch»
  3. Catch - Un "capture" bloc récupère une exception et crée un objet contenant les informations d'exception
Essayons de déclencher une exception avec un code valide:
<?php
//create function with an exception
function checkNum($number)
  {
  if($number>1)
    {
    throw new Exception("Value must be 1 or below");
    }
  return true;
  }

//trigger exception in a "try" block
try
  {
  checkNum(2);
  //If the exception is thrown, this text will not be shown
  echo 'If you see this, the number is 1 or below';
  }

//catch exception
catch(Exception $e)
  {
  echo 'Message: ' .$e->getMessage();
  }
?>
Le code ci-dessus obtiendrez une erreur comme ceci:
Message: Value must be 1 or below

Exemple expliqué:

Le code ci-dessus jette une exception et qu'il attrape:
  1. Le checkNum () est créée. Il vérifie si un nombre est supérieur à 1. Si c'est le cas, une exception est levée
  2. Le checkNum () est appelée dans un "try" bloc
  3. L'exception au sein de la fonction checkNum () est lancée
  4. Le "catch" bloc retrives l'exception et crée un objet ($ e) contenant les informations d'exception
  5. Le message d'erreur de l'exception est fait l'écho en appelant $ e-> getMessage () de l'objet exception
Toutefois, une façon de contourner la "chaque lancer doit y avoir un cran" règle est de définir un gestionnaire de haut niveau exception pour gérer les erreurs qui se glisseraient à travers.

Création d'une classe d'exception personnalisée

Création d'un gestionnaire d'exception personnalisé est assez simple. Nous créons simplement une classe spéciale avec des fonctions qui peuvent être appelées si une exception survient en PHP. La classe doit être une extension de la classe d'exception.
La classe d'exception personnalisée hérite des propriétés de la classe des exceptions de PHP et vous pouvez ajouter des fonctions personnalisées.
Permet de créer une classe d'exception:
<?php
class customException extends Exception
  {
  public function errorMessage()
    {
    //error message
    $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
    .': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
    return $errorMsg;
    }
  }

$email = "someone@example...com";

try
  {
  //check if
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
    {
    //throw exception if email is not valid
    throw new customException($email);
    }
  }

catch (customException $e)
  {
  //display custom message
  echo $e->errorMessage();
  }
?>
La nouvelle classe est une copie de la classe d'exception ancienne, avec un ajout de la fonction errorMessage (). Comme il s'agit d'une copie de l'ancienne classe, et il hérite des propriétés et méthodes de la vieille classe, nous pouvons utiliser les méthodes de la classe d'exception comme getline () et getFile () et getMessage ().

Exemple expliqué:

Le code ci-dessus jette une exception et l'attrape avec une classe d'exception personnalisée:
  1. La classe customException () est créée comme une extension de la classe d'exception ancienne. De cette façon, il hérite de toutes les méthodes et les propriétés de la classe d'exception ancienne
  2. La fonction errorMessage () est créée. Cette fonction retourne un message d'erreur si une adresse e-mail n'est pas valide
  3. La variable $ email est défini sur une chaîne qui n'est pas une adresse e-mail
  4. Le "try" bloc est exécuté et une exception est levée depuis l'adresse e-mail n'est pas valide
  5. Le "catch" bloc intercepte l'exception et affiche le message d'erreur

Exceptions multiples

Il est possible pour un script pour utiliser plusieurs exceptions à vérifier plusieurs conditions.
Il est possible d'utiliser plusieurs blocs else .. si, un commutateur, ou des exceptions imbriquer plusieurs. Ces exceptions peuvent utiliser des classes d'exception différents et retourner les messages d'erreur différents:
<?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> is not a valid E-Mail address';
return $errorMsg;
}
}

$email = "someone@example.com";

try
  {
  //check if
  if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
    {
    //throw exception if email is not valid
    throw new customException($email);
    }
  //check for "example" in mail address
  if(strpos($email, "example") !== FALSE)
    {
    throw new Exception("$email is an example e-mail");
    }
  }

catch (customException $e)
  {
  echo $e->errorMessage();
  }

catch(Exception $e)
  {
  echo $e->getMessage();
  }
?>

Exemple expliqué:

Le code ci-dessus les tests deux conditions et lève une exception si l'une des conditions ne sont pas remplies:
  1. La classe customException () est créée comme une extension de la classe d'exception ancienne. De cette façon, il hérite de toutes les méthodes et les propriétés de la classe d'exception ancienne
  2. La fonction errorMessage () est créée. Cette fonction retourne un message d'erreur si une adresse e-mail n'est pas valide
  3. La variable $ email est défini sur une chaîne qui est une adresse e-mail, mais contient la chaîne "par exemple"
  4. Le "try" bloc est exécuté et une exception n'est pas levée sur la première condition
  5. La deuxième condition déclenche une exception, car l'e-mail contient la chaîne "par exemple"
  6. Le "catch" bloc intercepte l'exception et affiche le message d'erreur correct
Si l'exception renvoyée étaient de la classe et customException n'y avait pas de prise customException, seulement les captures d'exception de base, à l'exception seraient traitées là-bas.

Re-levée des exceptions

Parfois, quand une exception est levée, vous pouvez le manipuler différemment de la façon standard. Il est possible de lever une exception une seconde fois dans un "catch" bloc.
Un script devrait masquer les erreurs du système auprès des utilisateurs. Les erreurs système peuvent être importants pour le codeur, mais n'est d'aucun intérêt pour l'utilisateur. Pour rendre les choses plus facile pour l'utilisateur que vous pouvez re-lever l'exception avec un message convivial:
<?php
class customException extends Exception
  {
  public function errorMessage()
    {
    //error message
    $errorMsg = $this->getMessage().' is not a valid E-Mail address.';
    return $errorMsg;
    }
  }

$email = "someone@example.com";

try
  {
  try
    {
    //check for "example" in mail address
    if(strpos($email, "example") !== FALSE)
      {
      //throw exception if email is not valid
      throw new Exception($email);
      }
    }
  catch(Exception $e)
    {
    //re-throw exception
    throw new customException($email);
    }
  }

catch (customException $e)
  {
  //display custom message
  echo $e->errorMessage();
  }
?>

Exemple expliqué:

Le code ci-dessus teste si l'adresse email contient la chaîne "par exemple" en elle, si c'est le cas, l'exception est relancée:
  1. La classe customException () est créée comme une extension de la classe d'exception ancienne. De cette façon, il hérite de toutes les méthodes et les propriétés de la classe d'exception ancienne
  2. La fonction errorMessage () est créée. Cette fonction retourne un message d'erreur si une adresse e-mail n'est pas valide
  3. La variable $ email est défini sur une chaîne qui est une adresse e-mail, mais contient la chaîne "par exemple"
  4. Le "essayer" bloc contient un autre "essai" bloc pour le rendre possible de re-lever l'exception
  5. La seule exception est déclenchée depuis l'e-mail contient la chaîne "par exemple"
  6. Le "catch" bloc intercepte l'exception et re-jette un "customException"
  7. Le "customException" est pris et affiche un message d'erreur
Si l'exception n'est pas attrapée dans sa forme actuelle "try" bloc, il va rechercher un bloc catch sur "niveaux supérieurs".

Définir un gestionnaire de premier niveau Exception

Le set_exception_handler () la fonction définit une fonction définie par l'utilisateur à gérer toutes les exceptions non interceptées.
<?php
function myException($exception)
{
echo "<b>Exception:</b> " , $exception->getMessage();
}

set_exception_handler('myException');

throw new Exception('Uncaught Exception occurred');
?>
La sortie du code ci-dessus doit être quelque chose comme ceci:
Exception: Uncaught Exception occurred
Dans le code ci-dessus il n'y avait pas "de capture" bloc. Au lieu de cela, le gestionnaire de haut niveau exception déclenchée. Cette fonction doit être utilisée pour intercepter des exceptions non interceptées.

Règles pour les exceptions

  • Code peut être entouré dans un bloc try, pour aider à intercepter les exceptions possibles
  • Chaque bloc try ou «jeter» doit avoir au moins un bloc catch correspondant
  • Plusieurs blocs catch peuvent être utilisés pour attraper différentes classes d'exceptions
  • Des exceptions peuvent être lancées (ou relancées) dans un bloc catch au sein d'un bloc try
Une règle simple: Si vous jetez quelque chose, vous devez l'attraper.

26 commentaires:

  1. Howdy I am so excited I found your blog, I really found you by accident, while
    I was searching on Bing for something else, Nonetheless I am
    here now and would just like to say cheers for a fantastic post and a all round interesting
    blog (I also love the theme/design), I don’t have time to read
    it all at the moment but I have bookmarked it and also added in your RSS feeds, so when I have time
    I will be back to read more, Please do keep up the superb work.


    Look into my web blog - housekeeper uk

    ReplyDelete
  2. Appreciate this post. Let me try it out.

    Feel free to visit my site; hair growth cycle hair

    ReplyDelete
  3. Good info. Lucky me I came across your website by chance
    (stumbleupon). I have bookmarked it for later!

    Here is my weblog toenail fungus treatment
    my website - zetaclear reviews

    ReplyDelete
  4. Hi every one, here every person is sharing these kinds of familiarity, thus it's nice to read this weblog, and I used to go to see this weblog daily.

    Also visit my web blog; please click the next internet page

    ReplyDelete
  5. Wow, this article is fastidious, my sister is analyzing these things,
    thus I am going to convey her.
    on line phd program

    Feel free to surf to my blog post - mountain hardware

    ReplyDelete
  6. I love reading an article that can make men and women
    think. Also, thank you for allowing for me to comment!



    Look into my web page ... Evgeni Malkin Jersey

    ReplyDelete
  7. What's up to all, it's really a good for me to pay a quick visit this website,
    it includes valuable Information.

    Also visit my blog post :: Louis Vuitton Handbags

    ReplyDelete
  8. Your way of telling all in this article is in fact nice, all can effortlessly know it, Thanks a lot.


    my homepage ... Louis Vuitton Outlet Online

    ReplyDelete
  9. Marvelous, what a website it is! This weblog presents helpful information
    to us, keep it up.

    Take a look at my weblog - Full Report

    ReplyDelete
  10. I every time emailed this web site post page to all my
    friends, because if like to read it after that my links will too.


    Here is my homepage :: Gucci Borse

    ReplyDelete
  11. I absolutely love your site.. Excellent colors & theme.

    Did you make this web site yourself? Please reply back as I'm looking to create my own blog and want to learn where you got this from or just what the theme is called. Thanks!

    Here is my webpage: Authentic Mario Lemieux Jersey

    ReplyDelete
  12. Good day! This is my first visit to your blog! We are a group
    of volunteers and starting a new project in a community in the
    same niche. Your blog provided us beneficial information to work on.
    You have done a extraordinary job!

    Feel free to visit my page; Wholesale NFL Jerseys

    ReplyDelete
  13. I hardly comment, however after browsing through a
    lot of remarks here "PHP Exception Handling".
    I do have 2 questions for you if it's okay. Is it simply me or does it look like like some of the responses appear like they are coming from brain dead individuals? :-P And, if you are writing on other online social sites, I would like to follow anything fresh you have to post. Could you make a list of every one of your shared pages like your twitter feed, Facebook page or linkedin profile?

    my web page :: Learn More Here

    ReplyDelete
  14. It's actually a great and helpful piece of info. I am satisfied that you just shared this helpful information with us. Please stay us up to date like this. Thanks for sharing.

    Feel free to visit my web page - Sac Louis Vuitton Pas Cher

    ReplyDelete
  15. It's hard to find well-informed people in this particular topic, however, you seem like you know what you're talking about!

    Thanks

    My web-site :: Abercrombie France

    ReplyDelete
  16. There is definately a great deal to know about this issue. I like all of
    the points you've made.

    Here is my weblog; Air Jordan

    ReplyDelete
  17. Write more, thats all I have to say. Literally, it seems as though
    you relied on the video to make your point.
    You definitely know what youre talking about, why waste
    your intelligence on just posting videos to your blog
    when you could be giving us something enlightening to read?



    my homepage :: Sidney Crosby Authentic Jersey

    ReplyDelete
  18. My family all the time say that I am wasting my time here at net, however I know I am getting knowledge every day
    by reading thes nice posts.

    my blog :: Montre Guess

    ReplyDelete
  19. Right here is the right site for everyone who wants to find out about
    this topic. You know a whole lot its almost hard to argue with you (not that I
    really will need to…HaHa). You certainly put a brand new spin on a subject that
    has been written about for years. Excellent stuff, just excellent!



    Also visit my web blog ... Louis Vuitton Outlet

    ReplyDelete
  20. Pretty great post. I simply stumbled upon your weblog and wished to say that I have truly enjoyed surfing around your
    blog posts. In any case I'll be subscribing for your rss feed and I hope you write again very soon!

    Feel free to surf to my page ... Tory Burch Shoes :: ::

    ReplyDelete
  21. Everything published was actually very reasonable.
    However, what about this? what if you added a little information?
    I am not suggesting your content is not good., but what if you added something that grabbed
    a person's attention? I mean "PHP Exception Handling" is kinda plain. You ought to glance at Yahoo's home page and
    see how they create article titles to get viewers to open the links.

    You might add a video or a related picture or two to grab people excited
    about what you've got to say. In my opinion, it could make your website a little bit more interesting.

    Also visit my site: Wholesale Jerseys :: ::

    ReplyDelete
  22. I'm pretty pleased to discover this page. I want to to thank you for your time just for this wonderful read!! I definitely enjoyed every little bit of it and i also have you book-marked to check out new stuff in your blog.

    Also visit my page - Beats By Dre Pas Cher

    ReplyDelete
  23. Hey would you mind stating which blog platform you're working with? I'm
    looking to start my own blog in the near future but I'm having a hard time deciding between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your layout seems different then most blogs and I'm looking for something completely unique.
    P.S Sorry for getting off-topic but I had to ask!

    Feel free to surf to my blog Sac A Main Louis Vuitton (http://smu-fr.org/)

    ReplyDelete
  24. Hi there, its pleasant piece of writing concerning media print, we all understand media is a fantastic source of information.


    Also visit my web-site :: Nike Blazers High

    ReplyDelete
  25. What i do not understood is in fact how you're no longer actually a lot more smartly-favored than you may be right now. You're very intelligent.

    You understand therefore significantly when it comes to this matter, produced me individually consider
    it from numerous numerous angles. Its like men and women
    don't seem to be involved unless it's something to do with
    Girl gaga! Your personal stuffs outstanding. All the time handle it up!


    Feel free to visit my weblog ... Air max pas Cher

    ReplyDelete
  26. I visited several web pages but the audio feature for audio
    songs present at this web site is genuinely excellent.

    Also visit my blog: Air Max

    ReplyDelete

HELLO VISITORS THANKS FOR YOUR VISIT AND COMMENT