Page 1 sur 1

Les assertions remplacent elles les exceptions ?

Posté : 08 mai 2009, 21:43
par niuxe
Salut tout le monde,

Tout est dans le titre. Merci de me donner quelques précisions sur le sujet.


Bonne soirée à vous. :)

Posté : 08 mai 2009, 21:52
par Nagol
réponse: non

Posté : 10 mai 2009, 19:24
par Hywan
Hey :),

Les exceptions sont un mécanisme d'erreur plus souple que les erreurs natives de PHP (voir les constantes E_*). On peut avoir de l'héritage, des méthodes etc. car ce sont des objets. Elles sont accompagnées d'un système d'essai-capture (try-catch) etc.
Les assertions vérifient la vérité d'une expression, soit dit autrement : on vérifie qu'une expression est juste/vraie. Par exemple : is_bool($variable) est une assertion ; on vérifie qu'on a à faire à un booléen.

En général, les assertions sont utilisées dans le cadre de tests, et non pas d'erreurs d'exécution (à l'instar des exceptions).

Toutefois, le mécanisme d'assertion de PHP est très peu puissant. C'est un bon début, mais il n'est pas assez souple. Il a avantage de ne pas exécuter, ni même d'évaluer le code (sous forme de chaîne de caractères) passé en paramètre de la fonction assert(), sauf si une directive dans le php.ini le précise. C'est la seule fonction de PHP qui a ce comportement et on ne peut l'imiter sauf si on se fait notre propre compiliation ou module.

Posté : 11 mai 2009, 22:38
par niuxe
Salut Hywan,

Je te remercie de cette précision. Je m'étais embrouillé l'esprit entre les deux (assertions et exception). Si j'ai compris et ce que j'ai pu lire, cela permet à l'interpréteur de donner dès le départ une logique. ex :

Code : Tout sélectionner

$nombreNews = 10; assert($nombreNews >=0);
Bonne soirée à toi

Posté : 12 mai 2009, 09:46
par Hywan
$n = 10;
assert('$n < 0');
Si $n est supérieur ou égal à zéro, alors une erreur (warning) sera levée : Warning: assert(): Assertion "$n < 0" failed in … Tu peux détourner les erreurs assert_options() en utilisant l'option ASSERT_CALLBACK. Un exemple est donné dans le manuel de cette fonction.