6
votes

Pourquoi @unset donne-t-il une erreur d'analyse?

Pourquoi ne pouvez-vous pas masquer les erreurs avec l'opérateur @ code> lorsque vous appelez non défini code>? Les résultats suivants dans une erreur d'analyse:

@unset($myvar);


0 commentaires

4 Réponses :


10
votes

L'opérateur @ ne fonctionne que sur les expressions et non défini est une construction de langue, pas une fonction. Voir le page manuelle pour plus d'informations:

Remarque: le @ -Opérator fonctionne uniquement sur expressions. Une simple règle de pouce est: si vous pouvez prendre la valeur de quelque chose, vous pouvez préparer le @ opérateur à celui-ci. Par exemple, vous pouvez prépendez-le aux variables, fonctionner et inclure () appels, constantes, etc. en avant. Vous ne pouvez pas le préparer à définitions de fonction ou de classe, ou structures conditionnelles telles que si et foreach, et ainsi de suite.


0 commentaires

5
votes

Vous pouvez masquer des erreurs en préfixant @ aux fonctions / déclarations. Cependant non défini est une construction de langue, il ne supporte donc pas le @ -rule.

La bonne chose est que non défini () ne manque jamais même si la variable n'existait pas pour commencer, cela ne devrait donc pas être nécessaire.

comme Nightcracker mentionné cependant, en utilisant @ est une mauvaise pratique.


2 commentaires

Pas tout à fait correct - nonset ($ indéfini) n'échouera pas, mais nonset ($ indéfini ["foo ']) sera.


C'est vrai que, mais si vous n'initialisez pas les tableaux, vous avez d'autres problèmes imo :)



4
votes

L'opérateur de suppression d'erreur ne fonctionne que sur les expressions:

nonset est une construction de langue et non une fonction, donc @ ne peut pas être utilisé.


0 commentaires

0
votes

Pourquoi ne pouvez-vous pas masquer les erreurs avec l'opérateur @ lorsque vous appelez non défini?

Je ne sais pas. Mais vous ne devriez pas utiliser l'opérateur de suppression d'erreur (@) de toute façon. Il y a deux scénarios distincts:

développementalt

Vous voulez voir toutes les erreurs juste pour le moment où elles se produisent , de préférence avec le message d'erreur brut que PHP vous donne.

Production

Vous voulez laisser aucun message d'erreur PHP bulle à l'utilisateur . Au lieu de cela, vous souhaitez enregistrer le message d'erreur PHP et afficher votre propre message qu'un profane peut comprendre.

Vous ne pouvez pas réaliser cette distinction lorsque vous utilisez @. Vous devez séparer les scénarios thèses en configurant display_errors , error_reporting et définir un gestionnaire d'erreur avec set_error_handler .


0 commentaires