2009-10-23 3 views
1

Possible en double:
Reference - What does this symbol mean in PHP?est-il un problème en utilisant le '@' en écrivant le code

est-il un problème en utilisant le '@' en écrivant le code? et quel est le mécanisme derrière?

+0

Utilisé dans cette partie du code? –

+4

A l'intérieur d'une chaîne qui stocke une adresse email, elle est parfaitement valide. –

+1

en l'utilisant comme suppresseur d'erreur est considéré comme une mauvaise programmation! c'est la seule chose à dire à ce sujet. ne l'utilisez pas! écrivez votre code pour ne pas en avoir besoin! les erreurs sont là pour un but, traiter avec eux, ne les supprime pas. – markus

Répondre

6

Il supprime les rapports d'erreurs, donc je suppose que cela rend le débogage d'un peu plus difficile ;-)

+0

dang, bat-moi à ça. Si seulement je n'avais pas voyagé sur le site PHP pour trouver le lien ;-) –

3

Le @ operator en PHP est un opérateur de contrôle d'erreur. Il supprime les erreurs pour toute expression qu'il précède.

Le seul problème évident est que cela rend votre code plus difficile à déboguer. Depuis un intervenant a demandé ... Il est plutôt utile dans les situations où vous voulez utiliser une variable qui pourrait ne pas exister - comme une variable $ _GET ou $ _POST.

if (isset($_GET['hello'] && $_GET['hello'] == "yes") {} // without @ 
if (@$_GET['hello'] == "yes") {} // with @ 

Certaines fonctions php jettent aussi des erreurs ainsi que le retour faux si dans ces situations, vous pouvez supprimer l'erreur et vérifier la valeur de retour au lieu d'essayer et attraper.

+0

Pourquoi voudriez-vous jamais supprimer les erreurs de quelque chose? C'est effectivement équivalent à 'try {' ... '} catch {}' - avec un catch-block vide - ce qui est généralement considéré comme inacceptable sans excuse (il peut y avoir une excuse si vous faites quelque chose dans 'catch ', mais pas avec un bloc vide). –

+1

Considéré comme inacceptable par qui? Il y a beaucoup de raisons parfaitement valables pour utiliser l'opérateur @ et je les ai vues utilisées dans de nombreux projets open source, y compris Joomla et phpBB. Voir ma mise à jour pour un exemple d'utilisation parfaitement acceptable (et recommandée par moi) de l'opérateur @. –

+0

@Pavel Minaev Cause son PHP? Une langue avec des développeurs seniors plus junior alors sens. J'aime quand les gens font des choses comme ça, parce que cela me donne plus de sécurité d'emploi plus tard quand je me mets en contrat au taux du marché 4x pour le réparer. – David

5

WARNING: Actuellement, le « @ » contrôle d'erreur préfixe opérateur même désactiver rapport d'erreurs pour les erreurs critiques , qui stoppent l'exécution du script. Entre autres choses, cela signifie que si vous utilisez « @ » pour supprimer les erreurs d'une certaine fonction et soit il n'est pas disponible ou a été mal saisi, le script va mourir là sans indication pour expliquer pourquoi .

1

Cela peut être utile si vous utilisez une bibliothèque externe qui déclenche une erreur que vous pouvez ignorer en toute sécurité. Un exemple simple serait une bibliothèque qui déclenche une erreur lorsqu'elle ne parvient pas à se connecter à un service externe, si vous pouvez en déduire l'échec en fonction d'une valeur de retour d'une fonction, vous pouvez utiliser l'opérateur @ pour supprimer l'erreur relativement inutile. Je ne l'utiliserais jamais lors du codage, car il rend le débogage du code plutôt difficile si vous n'avez pas d'erreurs de travail, utilisez-le uniquement sur du code que vous savez "fonctionne", mais peut lancer l'erreur étrange que vous n'êtes pas

0

Non seulement il supprime les erreurs que vous pourriez avoir besoin de savoir, mais il ralentit votre code indépendamment du fait que des erreurs soient rencontrées. @ fonctionne en réglant temporairement le paramètre php ini pour le rapport d'erreur sur 0, puis revient au réglage précédent. L'utilisation de @ dans n'importe quel contexte est une mauvaise idée.

0

Il est presque possible d'évaluer une variable

$x = @ $somearray[$somethingelse]; # suppress E_NOTICE if array key is absent 

Mais dans tout autre contexte, c'est absolument terrible. Le pire est d'appeler une fonction avec "@" en effet - la fonction entière et ses propres sous-routines seraient alors exécutées avec un rapport d'erreurs désactivé. Si l'un de ceux-ci était de jeter une exception fatale, vous n'auriez pas la moindre idée d'où et quoi.

Erreur PHP gérer terrible. Mais utiliser @ est pire. Malheureusement, il n'y a pas d'opérateur pour simplement supprimer certains (par exemple juste E_NOTICE et E_WARN) et pas d'autres.

Questions connexes