Gestion des erreurs et assertion

On a appris comment détecter les erreurs, et comment les interpréter. Maintenant nous allons voir comment réagir de façon simple à une erreur. Le plus souvent, les fonctions retournent NULL ou FALSE en cas d'échec. On peut faire un test et intercepter les erreurs par différentes manières :

En utilisant des conditions

<?php
if( ! fonction() )
{
// instructions si la fonction échoue
}
?>

 

En utilisant l'opérateur OR

<?php
$resultat = fonction () or intruction_erreur()
?>

 

De ma même façon on peut aussi gérer l'affichage des erreurs en fonction de l'échec ou de la réussite de la fonction. La fonction trigger_error() crée l'erreur

<?php
$resultat = fonction() or trigger_error (‘échec de la fonction', E_USER_ERROR)

 

En mettant des "@" en début d'appel d'une fonction, on pourra aussi masquer les erreurs retournées par la fonction correspondante.

C'est une notion pas très pratique mais bonne à savoir puisque les erreurs doivent être corrigées et non pas masquées. Cependant, dans certains cas, il peut être préférable de s'assurer que le script continue à tourner, plutot que de s'arreter simplement.

Par la suite, nous allons voir de plus près comment intercepter les erreurs internes de l'application et comment réagir face à cela.

Les assertions

Une assertion c'est une sorte de règle qu'on se fixe au départ et sur laquelle est basée l'application. Il s'agit d'une infirmation fonctionnelle et logique telle que : "la note des élèves doit être un nombre positif ou null", "l'effectif des élève doit être un nombre sans décimal positif", etc. Quand on exécute le script, les assertions seront évaluées et on a une erreur si l'une d'elles n'est pas respectée.

L'intérêt des assertions réside sur le fait qu'elles permettent de s'assurer de la validité des données. Les assertions sont donc assimilables à des structures de contrôle. Cependant, elle est mieux adaptée à la vérification des données internes à un script. Pour les données externes, mieux vaut utiliser if.

Activer une assertion

Avant de définir une assertion, il faut d'abord s'assurer qu'elle soit active. Pour configurer l'activation de l'assertion, il existe deux façons :

La première serait de l'activer dans le code lui-même en appelant la fonction assert_options comme suit :

<?php
//activation de l'assertion
assert_options(ASSERT_ACTIVE, 1);
?>

 

On peut aussi configurer directement dans le fichier php.ini , sachant que :

Pour que les assertions soient prises en compte, on met :

<?php
assert.active = On ;
?>

 

A l'inverse, pour ignorer les assertions, on met :

<?php
assert.active = Off ;
?>

 

Utiliser une assertion

Après avoir activé l'assertion on peut l'utiliser. Pour cela, il faut la déclarer à l'aide de la fonction assert. Voyons ça de plus près avec des exemples

Exemple 1

<?php
assert_options(ASSERT_ACTIVE, 1);
$note = 4;
assert('$note>=0');
echo $note;
?>

 

Cet exemple affiche bien 4 sans problèmes à l'écran puisque la note vaut 4 donc la valeur de la note vérifie bien l'assertion.

Par contre dans l'exemple suivant, en mettant comme valeur de la note : –4 à la place de 4, le script génère un warning puisque l'assertion n'est pas vraie :

Exemple 2

<?php
assert_options(ASSERT_ACTIVE, 1);
$note = -4;
assert('$note>=0');
echo $note;
?>

 

Si vous tester l'exemple 2, il renvoie une erreur standard PHP de ce type :

Warning: assert() [function.assert]: Assertion "$note>0" failed in C:wampwwwTESTTUTOassertion.php on line 6

Ce qui n'est pas très agréable aux yeux de l'utilisateur. Il est alors possible de personnaliser la gestion des assertions via un gestionnaire spécifique que l'on crée soit même. Il s'agit d'une fonction possédant 3 arguments : l'adresse du script, le numéro de ligne où l'affirmation a été faite et le message.

<?php
function gestion_assert($script, $ligne,$message)
{

echo "<p>Une assertion est fausse :
<strong>dans le script</strong> : $script
<strong>à la Ligne</strong> : $ligne
<strong>Message</strong> : $message</p>";
}
?>

 

On insère gestion_assert, c'est-à-dire le nom de la fonction comme étant un deuxième argument dans la fonction assert_option pour l'appeler en cas d'erreur. Sachant que ASSER_CALLBACK est la directive qui enregistre le gestionnaire d'assertion dans PHP.

<?php
assert_options(ASSERT_CALLBACK, 'gestion_assert');
?>

 

A propos de l'auteur

Nicolas Galle

Nicolas Galle est développeur web sénior pour l'agence SEO Aseox.