Gérer les mauvais arguments d'une fonction

Discret
Invité n'ayant pas de compte PHPfrance

21 déc. 2005, 02:46

Bonjour à tous.

Lorsqu'une fonction repère une erreur, j'aimerais qu'elle appelle une fonction de gestion d'erreur. Exemple:
function erreur ($message) {
   die ("<b>Erreur : " . $message . "</b>");
}

function $somme ($a, $b) {
   if (! is_int ($a) or ! is_int ($b))
      erreur ("Les arguments de la fonction 'somme' doivent être entiers.");
   return $a + $b;
}

echo $somme ("pomme", "poire");
J'aimerais que la fonction 'erreur' m'indique le numero de ligne, le fichier, et éventuellement le nom de la classe, de la methode ou de la fonction qui l'a appellé. Il est bien sur possible de le faire en donnant à chaque appel de 'erreur' des constantes magiques tel que __FILE__ par exemple.

Y a-t-il moyen de determiner dans la fonction 'erreur', l'endroit où elle a été appellé pour alléger le code lors de chaque appel ?


Autre chose.

Voici un cours morceau de code qui provoque une erreur évidente:
function message ($message) {
   echo $message;
}

message ();
J'aimerais que lorsqu'une erreur de ce type se produise, une fonction personnelle soit appellée. Est-ce possible sans modifier le fichier de configuration de php ?


Merci de votre aide.

ViPHP
ViPHP | 649 Messages

21 déc. 2005, 03:16

Tout ça, c'est le boulot de PHP, en particulier ton deuxième code: Le parseur, c'est PHP, on peut pas toucher à ce qu'il écrit, rien.

Pour ton premier problème, la fonction erreur() ne sera jamais appelée car on ne peut pas tester $a et $b pour la simple et bonne raison que tu n'as nulle part défini leur valeur. Pour indiquer la ligne de l'erreur, tu pourrais toujours compter les <br /> ou les \n (dépendemment du type de fichier) mais encore, PHP fait très bien le boulot.
Image

ViPHP
ViPHP | 1380 Messages

21 déc. 2005, 10:06

J'aimerais que lorsqu'une erreur de ce type se produise, une fonction personnelle soit appellée. Est-ce possible sans modifier le fichier de configuration de php ?
C'est tout à fait possible en gérant toi même les erreurs. Il te faudra, bien sûr te constituer un bibliothèque complète des traductions des messages d'erreurs. Pas insurmontable.

La fonction à utiliser pour rediriger la gestion des erreurs vers ta fonction perso est : set_error_handler

Autre lecture:
http://php.belnet.be/manual/fr/ref.errorfunc.php
ripat

Eléphant du PHP | 353 Messages

21 déc. 2005, 10:57