Comment déclarer une assertion
Pour déclarer une nouvelle assertion, il faut utiliser la fonction
assert(). Cette fonction prend en argument l'affirmation
entre apostrophes.
Exemple :
Code : PHP | <?php
assert_options(ASSERT_ACTIVE, 1); // On active les assertions (au cas où).
$nombre_news = 50;
$vitesse = 100;
assert('$nombre_news >= 0'); // Le nombre de news ne peut être négatif.
assert('$vitesse > 10 && $vitesse < 150'); // La vitesse est comprise entre 10 et 150 km/h.
?>
|
Si vous utilisez des guillemets pour contenir votre affirmation, PHP interprète d'abord les variables contenues dedans avant de la fournir en paramètre à la fonction assert().
L'assertion assert("!empty($vitesse)") deviendrait par exemple : assert('!empty(90)'), ce qui poserait problème car empty attend une variable et non une valeur en paramètre.
Si vous testez ce code, vous allez vous rendre compte que... rien ne se passe !
Et c'est normal ! On crée une assertion disant que le nombre de news ne peut être négatif et justement,
$nombre_news est positif.
Bon : comme ça, ça peut paraître inutile, mais il faut imaginer que la variable utilisée dans l'assertion est le résultat de calcul et n'est pas définie juste avant.
Eh ! Je viens de modifier la valeur de $vitesse pour voir. Je lui ai donné 5 comme valeur et j'obtiens ça :
Warning: assert() [function.assert]: Assertion "$vitesse > 10 AND $vitesse < 150" failed in [...] on line x
C'est une erreur qui nous avertit que l'affirmation de l'assertion n'est plus vraie (
$vitesse n'est plus comprise entre 10 et 150). Nous allons justement voir comment gérer les erreurs d'assertion dans la prochaine partie.
La gestion des erreurs
Lorsqu'une assertion n'est plus vraie, PHP renvoie une magnifique erreur de niveau
E_WARNING. Nous allons voir comment personnaliser la gestion des erreurs en utilisant notre propre fonction !
Personnalisations de la gestion des erreurs
Nous avons vu auparavant que la fonction
assert_options() permet d'activer / désactiver les assertions. Mais cette fonction peut faire bien plus ! Une autre de ses utilisations est de
définir une fonction de callback. Cette fonction spéciale sera appelée lorsqu'une assertion échouera.
Voici comment définir cette fonction :
Code : PHP | <?php
// Définition de la fonction à appeler en cas d'erreur.
assert_options(ASSERT_CALLBACK, 'nom_de_la_fonction');
?>
|
Il est aussi possible de définir la fonction à utiliser directement dans le php.ini avec la directive assert.callback. Si vous préférez utiliser cette méthode, pensez bien à inclure votre fonction sur chaque page utilisant les assertions.
Il ne reste plus qu'à créer votre fonction !

Mais comment je la crée, ma fonction de callback ?
Demandons à la doc.
Citation : La super DocLa fonction de callback doit accepter trois arguments. Le premier contient le nom du fichier qui a vu l'assertion échouer. Le second contient le numéro de ligne dans le fichier précédent. Le troisième argument contient l'expression qui a échoué [...].
Votre fonction doit donc accepter trois arguments :
- le nom du fichier,
- la ligne,
- l'assertion qui est fausse.
Voici ce que pourrait être votre fonction :
Code : PHP | <?php
function gestion_assert($script, $ligne, $erreur) // Fonction qui gère les erreurs des assertions.
{
echo "<p>Une assertion est fausse :<br />
<strong>Script</strong> : <em>$script</em><br />
<strong>Ligne</strong> : <em>$ligne</em><br />
<strong>Assertion</strong> : <em>$erreur</em></p>";
}
?>
|
Maintenant, testons notre fonction !
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | <?php
function gestion_assert($script, $ligne, $erreur) // Fonction qui gère les erreurs des assertions.
{
echo "<p>Une assertion est fausse :<br />
<strong>Script</strong> : <em>$script</em><br />
<strong>Ligne</strong> : <em>$ligne</em><br />
<strong>Assertion</strong> : <em>$erreur</em></p>";
}
// On active les assertions.
assert_options(ASSERT_ACTIVE, 1);
// Définition de la fonction à appeler en cas d'erreur.
assert_options(ASSERT_CALLBACK, 'gestion_assert');
// Création d'une assertion fausse.
$id_membre = -24;
assert('$id_membre >= 0');
?>
|
Cela marche ! C'est vrai que c'est beaucoup plus joli.
Ah mais attends ! J'obtiens ceci :
Citation : Ma pageUne assertion est fausse :
Script : C:\wamp\www\PHP\Dev\others\Sdz\Tuto\assertions.php
Line : 19
Assertion : $id_membre >= 0
Warning: assert() [function.assert]: Assertion "$id_membre >= 0" failed in C:\wamp\www\PHP\Dev\others\Sdz\Tuto\assertions.php on line 19
Il y a encore l'affichage d'erreur par défaut.
Pas de panique ! En fait, PHP est un peu égoïste : il ne veut pas nous laisser gérer les erreurs !
Il faut désactiver le rapport d'erreur durant l'évaluation d'une assertion. Pour faire cela, nous allons (encore !) avoir besoin de la fonction
assert_options().
Il est aussi possible de définir ce comportement directement dans le php.ini en modifiant la directive assert.warning et la directive assert.quiet_eval.
Code : PHP | <?php
// On désactive le rapport d'erreur durant l'évaluation d'une assertion.
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);
?>
|
Ce qui nous donne :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | <?php
function gestion_assert($script, $ligne, $erreur) // Fonction qui gère les erreurs des assertions.
{
echo "<p>Une assertion est fausse :<br />
<strong>Script</strong> : <em>$script</em><br />
<strong>Ligne</strong> : <em>$ligne</em><br />
<strong>Assertion</strong> : <em>$erreur</em></p>";
}
// On active les assertions.
assert_options(ASSERT_ACTIVE, 1);
// On désactive le rapport d'erreur durant l'évaluation d'une assertion.
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);
// Définition de la fonction à appeler en cas d'erreur.
assert_options(ASSERT_CALLBACK, 'gestion_assert');
// Création d'une assertion fausse.
$id_membre = -24;
assert('$id_membre >= 0');
?>
|
Et cette fois, ça fonctionne parfaitement.
