@ caractère avant un appel de fonction

135

Quelle est la différence entre ces deux appels de fonction en PHP?

init_get($somevariable);

@init_get($somevariable);
Nixie
la source
le "@" fermera toutes les erreurs et notifications php
Erkan Özkök

Réponses:

210

le "@" fera taire toutes les erreurs php que votre fonction pourrait soulever.

solidgumby
la source
Mais que faire si vous mettez @devant la trigger_errorfonction PHP ? J'ai vu cela dans certains codes, mais son comportement est incohérent pour moi jusqu'à présent. Dans certains cas, je vois l'erreur signalée par le gestionnaire d'erreurs configuré et dans d'autres cas, elle semble être signalée.
fritzmg
2
Le @sera temporairement mis error_reportingà 0 mais ne "supprimera" pas l'erreur.
solidgumpublié
36

Comme déjà répondu @, arrêtera l'erreur (le cas échéant) de s'afficher.
En termes de performances, cela n'est pas recommandé.

Ce que fait PHP est:

  • lecture de l'état d'affichage d'erreur
  • réglage de l'affichage des erreurs pour qu'il ne montre aucune erreur
  • exécuter votre fonction
  • régler l'affichage des erreurs à son état précédent

Si vous ne souhaitez pas que des erreurs apparaissent, utilisez error_reporting(0);.

Ou écrivez simplement du code sans bogue: P

AntonioCS
la source
Je préfère mettre zéro, mais si cela fonctionne, super je ne le savais pas :)
AntonioCS
1
Qu'en est-il des fonctions que vous ne contrôlez pas, comme le courrier par exemple? Quelles autres options existent? J'utilise @ en ce moment, mais ce serait génial de pouvoir le faire différemment
spuas
6

Comme tout le monde l'a dit, cela arrête la sortie des erreurs pour cette fonction particulière. Cependant, cela diminue considérablement les performances car il doit modifier le paramètre d'affichage des erreurs deux fois. Je recommanderais de NE PAS ignorer les avertissements ou les erreurs et de corriger le code à la place.

Daniel Sorichetti
la source
Merci à tous pour vos réponses. Ce code n'est pas le mien, je ne regardais que le code phpBB par curiosité, donc je n'ai aucun problème de performance. :) Merci encore.
nixie