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);
?>
//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
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:
- 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é»
- Jetez - Voilà comment vous déclenchez une exception. Chaque "lancer" doit avoir au moins un «catch»
- 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();
}
?>
//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:
- 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
- Le checkNum () est appelée dans un "try" bloc
- L'exception au sein de la fonction checkNum () est lancée
- Le "catch" bloc retrives l'exception et crée un objet ($ e) contenant les informations d'exception
- 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();
}
?>
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:
- 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
- La fonction errorMessage () est créée. Cette fonction retourne un message d'erreur si une adresse e-mail n'est pas valide
- La variable $ email est défini sur une chaîne qui n'est pas une adresse e-mail
- Le "try" bloc est exécuté et une exception est levée depuis l'adresse e-mail n'est pas valide
- 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();
}
?>
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:
- 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
- La fonction errorMessage () est créée. Cette fonction retourne un message d'erreur si une adresse e-mail n'est pas valide
- La variable $ email est défini sur une chaîne qui est une adresse e-mail, mais contient la chaîne "par exemple"
- Le "try" bloc est exécuté et une exception n'est pas levée sur la première condition
- La deuxième condition déclenche une exception, car l'e-mail contient la chaîne "par exemple"
- 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();
}
?>
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:
- 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
- La fonction errorMessage () est créée. Cette fonction retourne un message d'erreur si une adresse e-mail n'est pas valide
- La variable $ email est défini sur une chaîne qui est une adresse e-mail, mais contient la chaîne "par exemple"
- Le "essayer" bloc contient un autre "essai" bloc pour le rendre possible de re-lever l'exception
- La seule exception est déclenchée depuis l'e-mail contient la chaîne "par exemple"
- Le "catch" bloc intercepte l'exception et re-jette un "customException"
- 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');
?>
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.
Howdy I am so excited I found your blog, I really found you by accident, while
ReplyDeleteI 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
Appreciate this post. Let me try it out.
ReplyDeleteFeel free to visit my site; hair growth cycle hair
Good info. Lucky me I came across your website by chance
ReplyDelete(stumbleupon). I have bookmarked it for later!
Here is my weblog toenail fungus treatment
my website - zetaclear reviews
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.
ReplyDeleteAlso visit my web blog; please click the next internet page
Wow, this article is fastidious, my sister is analyzing these things,
ReplyDeletethus I am going to convey her.
on line phd program
Feel free to surf to my blog post - mountain hardware
I love reading an article that can make men and women
ReplyDeletethink. Also, thank you for allowing for me to comment!
Look into my web page ... Evgeni Malkin Jersey
What's up to all, it's really a good for me to pay a quick visit this website,
ReplyDeleteit includes valuable Information.
Also visit my blog post :: Louis Vuitton Handbags
Your way of telling all in this article is in fact nice, all can effortlessly know it, Thanks a lot.
ReplyDeletemy homepage ... Louis Vuitton Outlet Online
Marvelous, what a website it is! This weblog presents helpful information
ReplyDeleteto us, keep it up.
Take a look at my weblog - Full Report
I every time emailed this web site post page to all my
ReplyDeletefriends, because if like to read it after that my links will too.
Here is my homepage :: Gucci Borse
I absolutely love your site.. Excellent colors & theme.
ReplyDeleteDid 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
Good day! This is my first visit to your blog! We are a group
ReplyDeleteof 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
I hardly comment, however after browsing through a
ReplyDeletelot 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
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.
ReplyDeleteFeel free to visit my web page - Sac Louis Vuitton Pas Cher
It's hard to find well-informed people in this particular topic, however, you seem like you know what you're talking about!
ReplyDeleteThanks
My web-site :: Abercrombie France
There is definately a great deal to know about this issue. I like all of
ReplyDeletethe points you've made.
Here is my weblog; Air Jordan
Write more, thats all I have to say. Literally, it seems as though
ReplyDeleteyou 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
My family all the time say that I am wasting my time here at net, however I know I am getting knowledge every day
ReplyDeleteby reading thes nice posts.
my blog :: Montre Guess
Right here is the right site for everyone who wants to find out about
ReplyDeletethis 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
Pretty great post. I simply stumbled upon your weblog and wished to say that I have truly enjoyed surfing around your
ReplyDeleteblog 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 :: ::
Everything published was actually very reasonable.
ReplyDeleteHowever, 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 :: ::
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.
ReplyDeleteAlso visit my page - Beats By Dre Pas Cher
Hey would you mind stating which blog platform you're working with? I'm
ReplyDeletelooking 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/)
Hi there, its pleasant piece of writing concerning media print, we all understand media is a fantastic source of information.
ReplyDeleteAlso visit my web-site :: Nike Blazers High
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.
ReplyDeleteYou 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
I visited several web pages but the audio feature for audio
ReplyDeletesongs present at this web site is genuinely excellent.
Also visit my blog: Air Max