@ 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);

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.


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


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.