3 votes

Les messages E_STRICT sont lancés même s'ils ne sont pas définis

Depuis la mise à jour de mon serveur de test vers PHP 5.3.3 (Debian Squeeze), j'ai rencontré un comportement étrange concernant la gestion des erreurs en PHP.

J'ai défini error_reporting comme ceci:

error_reporting(E_ALL);

et vérifié le paramètre via

echo error_reporting();

ce qui renvoie 30719. Selon php.net cela signifie "Toutes les erreurs et avertissements, comme supportés, à l'exception du niveau E_STRICT.".

Mais à la ligne suivante (dans une définition de classe abstract class formInputContainer extends formContainer implements formElementValueable { ... }), cela se traduit par le message :

Strict (2048): Déclaration de formInputContainer::addElement() devrait être compatible avec celle de formContainer::addElement()

Pourquoi le message E_STRICT est-il affiché alors qu'il n'est pas défini? Même en changeant à E_ALL & ~E_STRICT cela ne fonctionne pas.

5voto

ircmaxell Points 74865

La raison pour laquelle vous les voyez même s'ils ne sont pas définis, c'est qu'ils sont générés au moment de la compilation (enfin, de l'analyse). Cela signifie que les erreurs sont déclenchées avant que votre appel à error_reporting() soit effectué. La solution réelle est de modifier le paramètre php.ini pour supprimer E_STRICT de la définition. Pour vous assurer que vous éditez le bon fichier, vérifiez phpinfo().

4voto

Linus Kleen Points 15925

Si c'est un gestionnaire d'erreurs personnalisé (défini via set_error_handler()), vous devrez vérifier le niveau actuel de error_reporting par vous-même. Un gestionnaire d'erreurs personnalisé reçoit tous les messages d'erreur :

Le manuel indique :

Il est important de se rappeler que le gestionnaire d'erreurs standard de PHP est complètement contourné pour les types d'erreurs spécifiés par error_types à moins que la fonction de rappel ne renvoie FALSE. Les paramètres de error_reporting() n'auront aucun effet et votre gestionnaire d'erreurs sera appelé quoi qu'il arrive - cependant, vous pouvez toujours lire la valeur actuelle de error_reporting et agir en conséquence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X