Exemple PHP Try Catch : didacticiel de gestion des exceptions et des erreurs

Qu'est-ce qu'une exception ?

Une erreur est un rรฉsultat inattendu du programme qui ne peut pas รชtre gรฉrรฉ par le programme lui-mรชme.

Les erreurs sont rรฉsolues en corrigeant le programme. Un exemple dโ€™erreur serait une boucle infinie qui ne cesse jamais de sโ€™exรฉcuter.

Une exception est un rรฉsultat inattendu du programme qui peut รชtre gรฉrรฉ par le programme lui-mรชme.

Des exemples d'exception incluent la tentative d'ouverture d'un fichier qui n'existe pas.

Cette exception peut รชtre gรฉrรฉe soit en crรฉant le fichier, soit en prรฉsentant ร  l'utilisateur la possibilitรฉ de rechercher le fichier.

Pourquoi gรฉrer les exceptions ?

  • ร‰vitez les rรฉsultats inattendus sur nos pages qui peuvent รชtre trรจs ennuyeux ou irritants pour nos utilisateurs finaux
  • Amรฉliorer la sรฉcuritรฉ de nos applications en n'exposant pas les informations que des utilisateurs malveillants pourraient utiliser pour attaquer nos applications
  • Les exceptions Php sont utilisรฉes pour modifier le flux normal d'un programme si une erreur prรฉvisible se produit.

Gestion des erreurs PHP

Lorsqu'une erreur survient, en fonction de vos paramรจtres de configuration, PHP affiche le message d'erreur dans le navigateur Web avec des informations relatives ร  l'erreur survenue.

PHP propose plusieurs faรงons de gรฉrer les erreurs.

Nous allons examiner trois (3) mรฉthodes couramment utilisรฉes ;

  1. Dรฉclarations de dรฉcรจsโ€“ la fonction die combine les fonctions dโ€™รฉcho et de sortie en une seule. C'est trรจs utile lorsque nous voulons afficher un message et arrรชter l'exรฉcution du script lorsqu'une erreur se produit.
  2. Gestionnaires d'erreurs personnalisรฉs โ€“ ce sont des fonctions dรฉfinies par lโ€™utilisateur qui sont appelรฉes chaque fois quโ€™une erreur se produit.
  3. Rapport d'erreur PHP โ€“ le message d'erreur en fonction de vos paramรจtres de rapport d'erreurs PHP. Cette mรฉthode est trรจs utile dans un environnement de dรฉveloppement lorsque vous n'avez aucune idรฉe de la cause de l'erreur. Les informations affichรฉes peuvent vous aider ร  dรฉboguer votre application.

Exemples de gestion des erreurs

Examinons maintenant quelques exemples simples de routines de gestion des erreurs.

Supposons que nous ayons dรฉveloppรฉ une application qui utilise des fichiers texte pour stocker des donnรฉes. Nous souhaiterons peut-รชtre vรฉrifier lโ€™existence du fichier avant dโ€™essayer dโ€™en lire les donnรฉes.

Le code ci-dessous implรฉmente l'exemple ci-dessus.

<?php
$denominator = 0;
echo 2 / $denominator;
?>

En supposant que vous ayez enregistrรฉ le fichier simple_error.php dans le dossier phptuts, ouvrez l'URL http://localhost/phptuts/simple_error.php

Vous obtiendrez les rรฉsultats suivants

Gestion des erreurs PHP

Comme vous pouvez le voir ร  partir des rรฉsultats ci-dessus, cela donne ร  notre application un aspect non professionnel et peut รชtre ennuyeux pour l'utilisateur.

Nous allons modifier le code ci-dessus et รฉcrire un gestionnaire d'erreurs pour l'application

<?php
$denominator = 0;
if ($denominator != 0) {
    echo 2 / $denominator;
} else {
    echo "cannot divide by zero (0)";
}
?>

En supposant que vous ayez enregistrรฉ le code ci-dessus sous error_handling.php, ouvrez l'URL http://localhost/phptuts/error_handling.php

Poignรฉe d'exception PHP en PHP

ร€ noter: c'est une bonne pratique de sรฉcuritรฉ d'afficher un message comme celui prรฉsentรฉ ci-dessus au lieu d'afficher le message du type ยซ Fichier introuvable ยป.

Regardons un autre exemple qui utilise un gestionnaire d'erreurs personnalisรฉ.

Le gestionnaire d'erreurs personnalisรฉ sera dรฉfini comme fonction de gestion des erreurs PHP par dรฉfaut et affichera essentiellement un numรฉro d'erreur et un message.

Le code ci-dessous illustre l'implรฉmentation de l'exemple ci-dessus

<?php
function my_error_handler($error_no, $error_msg)
{
    echo "Opps, something went wrong:";
    echo "Error number: [$error_no]";
    echo "Error Description: [$error_msg]";
}
set_error_handler("my_error_handler");
echo (5 / 0);
?>

Ouvrez l'URL http://localhost/phptuts/custom_error_handler.php vous obtiendrez les rรฉsultats suivants

. Gestion des erreurs PHP


Comme vous pouvez le voir dans l'exemple ci-dessus, les gestionnaires d'erreurs personnalisรฉs sont puissants dans le sens oรน

  • Ils nous permettent de personnaliser les messages d'erreur.
  • Le gestionnaire d'erreurs personnalisรฉ peut รฉgalement inclure la journalisation des erreurs dans un fichier/une base de donnรฉes, l'envoi d'un e-mail au dรฉveloppeur, etc.

Examinons maintenant le troisiรจme type de gestion des erreurs. Nous utiliserons la fonction error_reporting intรฉgrรฉe ร  PHP. Il a la syntaxe de base suivante

<?php
error_reporting($reporting_level);
?>

ICI,

  • ยซ error_reporting ยป est la fonction de rapport d'erreurs PHP
  • ยซ $reporting_level ยป est facultatif et peut รชtre utilisรฉ pour dรฉfinir le niveau de reporting. Si aucun niveau de rapport n'a รฉtรฉ spรฉcifiรฉ, PHP utilisera le niveau de rapport d'erreurs par dรฉfaut tel que spรฉcifiรฉ dans le fichier php.ini.
Niveau de reporting Description Exemple
E_WARNING Affiche uniquement les messages d'avertissement. N'arrรชte pas l'exรฉcution du script rapport d'erreur (E_WARNING);
E_NOTICE Affiche les avis qui peuvent survenir lors de l'exรฉcution normale d'un programme ou qui pourraient รชtre une erreur. rapport d'erreur (E_AVIS);
E_USER_ERROR Affiche les erreurs gรฉnรฉrรฉes par l'utilisateur, c'est-ร -dire un gestionnaire d'erreurs personnalisรฉ rapport d'erreur (E_USER_ERROR);
E_USER_WARNING Affiche les messages d'avertissement gรฉnรฉrรฉs par l'utilisateur rapport d'erreur (E_USER_WARNING);
E_USER_NOTICE Affiche les avis gรฉnรฉrรฉs par l'utilisateur rapport d'erreur (E_USER_NOTICE);
E_RECOVERABLE_ERROR Affiche les erreurs qui ne sont pas fatales et peuvent รชtre gรฉrรฉes ร  l'aide de gestionnaires d'erreurs personnalisรฉs rapport d'erreur (E_RECOVERABLE_ERROR);
E_ALL Affiche toutes les erreurs et avertissements rapport d'erreur (E_ALL);

Diffรฉrence entre les erreurs et les exceptions

  • Les exceptions sont levรฉes et destinรฉes ร  รชtre dรฉtectรฉes alors que les erreurs sont gรฉnรฉralement irrรฉcupรฉrables.
  • Les exceptions sont gรฉrรฉes de maniรจre orientรฉe objet. Cela signifie lorsqu'une exception est levรฉe ; un objet d'exception est crรฉรฉ et contient les dรฉtails de l'exception.

Le tableau ci-dessous montre les mรฉthodes des objets d'exception

Mรฉthode Description Exemple
getMessage () Affiche le message de l'exception
<?php
echo $e->getMessage();
?>
obtenezCode() Affiche le code numรฉrique qui reprรฉsente l'exception
<?php
echo $e->getCode();
?>
obtenirFichier() Affiche le nom du fichier et le chemin oรน l'exception s'est produite
<?php
echo $e->getFile();
?>
obtenirLigne() Affiche le numรฉro de ligne oรน l'exception s'est produite
<?php
echo $e->getLine();
?>
obtenezTrace () Affiche un tableau de l'arriรจretrace avant l'exception
<?php
print_r( $e->getTrace());
?>
obtenirPrรฉcรฉdent() Affiche l'exception prรฉcรฉdente avant l'exception actuelle
<?php
echo $e->getPrevious();
?>
obtenezTraceAsString() Affiche le dostrace de l'exception sous forme de chaรฎne de caractรจres au lieu d'un tableau
<?php
echo $e->getTraceAsString();
?>
__toString() Affiche l'intรฉgralitรฉ de l'exception sous forme de chaรฎne
<?php
echo $e->__toString();
?>


Vous trouverez ci-dessous la syntaxe de base pour lever une exception.

<?php
throw new Exception("This is an exception example");
?>

ICI,

  • "throw" est le mot-clรฉ utilisรฉ pour lever l'exception
  • ยซ new Exception (...) ยป crรฉe un objet d'exception et transmet la chaรฎne ยซ Ceci est un exemple d'exception ยป comme paramรจtre de message.

Le code ci-dessus gรฉnรจre le message suivant.

Poignรฉe d'exception PHP en PHP

Nous allons maintenant examiner un exemple qui implรฉmente les exceptions throw et catch.

Nous modifierons l'exemple ci-dessus et inclurons l'essai, le lancer et l'attraper.

Il a la syntaxe de base suivante.

<?php
try {
    //code goes here that could potentially throw an exception
}
catch (Exception $e) {
    //exception handling code goes here
}
?>

ICI,

  • ยซ try{โ€ฆ} ยป est le bloc de code ร  exรฉcuter qui pourrait potentiellement dรฉclencher une exception
  • ยซ catch(Exception $e){โ€ฆ} ยป est le bloc de code qui intercepte l'exception levรฉe et attribue l'objet d'exception ร  la variable $e.

Le code ci-dessous montre l'exemple d'exception de base avec l'exception try, throw et catch implรฉmentรฉe.

Le programme lรจve dรฉlibรฉrรฉment une exception qu'il intercepte ensuite.

<?php
try {
    $var_msg = "This is an exception example";
    throw new Exception($var_msg);
}
catch (Exception $e) {
    echo "Message: " . $e->getMessage();
    echo "";
    echo "getCode(): " . $e->getCode();
    echo "";
    echo "__toString(): " . $e->__toString();
}
?>

Ouvrez l'URL http://localhost/phptuts/exception_handling.php Vous obtiendrez les rรฉsultats suivants.

Poignรฉe d'exception PHP en PHP

Il est รฉgalement possible de crรฉer plusieurs exceptions pour une instruction try php en fonction du type d'exception levรฉe.

Voir l'article sur MySQL, Accรจs aux donnรฉes PHPโ€ฆ pour des exemples d'implรฉmentation de plusieurs exceptions

Exceptions multiples

Les exceptions multiples utilisent plusieurs blocs try catch pour gรฉrer les exceptions levรฉes. Plusieurs exceptions sont utiles lorsque :

  • Vous souhaitez afficher un message personnalisรฉ en fonction de l'exception levรฉe
  • Vous souhaitez effectuer une opรฉration unique en fonction de l'exception levรฉe

L'organigramme ci-dessous illustre le fonctionnement de plusieurs exceptions

Exceptions multiples

Regardons un exemple qui utilise plusieurs exceptions.

Nous allons modifier le code qui divise un nombre par le dรฉnominateur passรฉ.

Nous nous attendons ร  ce que deux types d'exceptions se produisent ;

  • Division par zรฉro
  • Division par un nombre nรฉgatif

Par souci de simplicitรฉ, nous afficherons uniquement le type d'exception dans nos blocs catch.

La classe Exception intรฉgrรฉe ร  PHP est utilisรฉe pour lancer des exceptions.

Nous allons crรฉer deux classes qui รฉtendent la classe d'exception et les utiliser pour lancer des exceptions.

Le code ci-dessous montre l'implรฉmentation.

<?php
class DivideByZeroException extends Exception {};
class DivideByNegativeException extends Exception {};
function process($denominator)
{
	try
	{
		if ($denominator == 0)
		{
			throw new DivideByZeroException();
		}
		else if ($denominator < 0)
		{
			throw new DivideByNegativeException();
		}
		else
		{
			echo 25 / $denominator;
		}
	}
	catch (DivideByZeroException $ex)
	{
		echo "DIVIDE BY ZERO EXCEPTION!";
	}
	catch (DivideByNegativeException $ex)
	{
		echo "DIVIDE BY NEGATIVE NUMBER EXCEPTION!";
	}
	catch (Exception $x)
	{
	echo "UNKNOWN EXCEPTION!";
	}
}
process(0);
?>

Tester le code

Nous supposerons que vous avez enregistrรฉ multiple_exceptions.php dans le dossier phptuts.

Accรฉdez ร  l'URL http://localhost/phptuts/multiple_exceptions.php

Poignรฉe d'exception PHP en PHP

Revenez au fichier PHP et transmettez -1 comme paramรจtre comme indiquรฉ dans le diagramme suivant.

Poignรฉe d'exception PHP en PHP

Accรฉdez ร  l'URL http://localhost/phptuts/multiple_exceptions.php.

Quels rรฉsultats obtenez-vous ? Passez 3 comme paramรจtre.

Quels rรฉsultats obtenez-vous ?

Rรฉsumรฉ

  • Les erreurs sont des rรฉsultats inattendus produits par le code PHP
  • La gestion des erreurs amรฉliore les performances de l'application
  • PHP a des fonctions intรฉgrรฉes qui peuvent รชtre utilisรฉes pour personnaliser la faรงon dont PHP signale les erreurs
  • Les exceptions sont comme des erreurs, mais elles peuvent รชtre interceptรฉes ร  l'aide du bloc catch lorsqu'elles sont lancรฉes.
  • L'affichage de messages d'erreur contenant des informations sur l'erreur est considรฉrรฉ comme une mauvaise pratique de sรฉcuritรฉ.

Rรฉsumez cet article avec :