Informatique


La gestion des erreurs

Qu'est-ce qu'une erreur

L'erreur peut se présenter sous deux formes différentes:

  • l'impossiblilité d'exécuter une action (par exemple une division par 0)
  • le choix du programmeur de ne pas accepter un contenu de variable

Dans les deux cas il s'agit généralement de contrôler des entrées utilisateur et envoyer un message d'erreur adéquat.

try tente d'exécuter le code compris entre ses accolades, lorsqu'une erreur est détectée dans le script une exception est lancée (throw), celle-ci est captée (catch) et un message d'erreur est affiché.
$except est un objet Exception dont le constructeur exige 2 paramètre: le message à afficher et un entier représentant le code de l'erreur.

S'il n'y a aucune erreur décelée le bloc catch est ignoré

Syntaxe
	try {
		//code à surveiller
		if(erreur prévue)
			{throw new Exception("message","code");}
		else{
			//Résultats
		}
	}
	catch(Exception $except)	{
		//gestion de l'erreur
	}	

Création d'un gestionnaire d'exception

Exécution impossible
Démo
<?php
	$num=100;
	$div=0;
	try	{
		if($div==0){throw new Exception("Division par 0 n'est pas autorisé!",2);}
		else{
			echo "Résultat de $num/$div =",$num/$div;
		}
	}
	catch(Exception $except)
	{
		echo "Message d'erreur: ", $except->getMessage()."<br>";
		echo "Code de l'erreur: ", $except->getCode()."<br>";
		echo "Fichier: ", $except->getFile()."<br>";
		echo "Ligne: ", $except->getLine()."<br>";
		echo "Avec __toString(): ", $except->__toString()."<br>";
	}
?>
Valeur refusée
Démo
	Ta valeur poupoule: <input type=text size=50 name=num placeholder="Entrer une valeur de 0 à 100:">
	<input type=submit value="Je joue!">
	</form>
	<?php
	$num=(int)$_POST['num'];
	try	{
		if(!($num>=0 && $num<=100)){throw new Exception("On t'as demandé une valeur entre 0 et 100!!!",1);}
		else{
			echo "Bravo, vous avez entré un nombre de 0 à 100: ",$num;
		}
	}
	catch(Exception $except)
		{
		echo "Message d'erreur: ", $except->getMessage()."<br>";
		}
	?>

Les proprétés et méthodes de l'objet Exception

Il existe deux propriétés, message et code.

Il existe 5 méthodes (6 avec le constructeur).

  • getMessage() renvoie le contenu de la propriété message
  • getCode() renvoie le contenu de la propriété code
  • getFile() renvoie le nom et le chemin du fichier dans lequel s'est produit l'erreur
  • getLine() renvoie le n° de ligne où a été créé l'exception
  • __toString() (attention: 2 underscore!) renvoie une chaîne de caractères contenant toute l'information sur l'exception