2009-12-24 4 views
1

Basicly J'ai un tas de liens sur une page et je vais utiliser quelque chose comme çaComment prévenir les notifications PHP avec une variable définie?

<?PHP echo $SITE_PATH ?> 

Beaucoup de fois sur la même page, mais il affichera un avis en PHP pour le faire.

Je sais que vous êtes censé utiliser des choses comme isset() mais aurais-je vraiment besoin de l'utiliser à chaque fois que j'appelle?

<?PHP echo $SITE_PATH ?> 

--- EDIT:
Si je passe à l'aide d'une variable définie, les avis semblent aller

Répondre

8

Deux solutions, ici:

  • utilisent que des variables qui existent - qui est ce que vous devriez probablement faire.
  • ou tester si elles existent (avec isset) avant d'essayer de les utiliser.

Il n'y a pas de magie ^^

Si votre application utilise de nombreuses variables, vous avez probablement un problème non défini dans votre conception.


Dans un cas comme celui que vous avez présenté, pour une variable qui est utilisé beaucoup de fois, je vous assurer qu'il existe, et, sinon, réglez-le « », par exemple, au début de mon script.

Ce ne cherche pas vraiment super, mais ça va marcher - et, de cette façon, vous ne serez pas passer par votre application tout, tout patcher.

(Ou je pourrais aussi désactiver le E_NOTICEerror_reporting niveau - Je ne aime pas cette idée, mais, parfois, il est vraiment la seule façon de traiter avec une base de code)

+0

Tester explicitement l'existence et les types d'une variable, bien que peu fréquente dans beaucoup de développement PHP, vous évitera des maux de tête plus tard, et est certainement une bonne pratique pour produire du code plus fort et vous préparer pour d'autres langages. . –

3

Vous pouvez supress messages en utilisant @:

print @$site_path; 

Ou vous pouvez utiliser une opération ternaire pour obtenir une valeur par défaut:

print (isset($site_path)) ? $site_path : "default_path" ; 

À la fin cependant, vous ne devriez pas utiliser de variables qui ne sont pas définies. Si vous êtes, vous devez repenser votre approche. Gérez ces informations à l'avance, de sorte que le reste de vos scripts puisse s'exécuter sans problèmes de ce type.

+2

Je recommanderais ce dernier. L'opérateur @, s'il est trop utilisé, peut être très coûteux et peut même supprimer les erreurs que vous avez vraiment besoin de voir. –

+0

D'accord, Darrell. – Sampson

0

Vous pouvez créer une fonction vérifier si la variable est définie et le retourner:

function EchoVar() { 
    global $SITE_PATH; 
    return isset($SITE_PATH) ? $SITE_PATH : ''; 
} 

// calling it 
echo EchoVar(); 
+1

N'introduisez pas 'global' qui n'est pas considéré comme une bonne chose. Spécifiez un paramètre ou définissez un objet avec la variable –

+0

Toute cette question est une mauvaise idée. Je ne pense pas que cela soit pire que de vouloir ignorer une variable non définie. –

1

Vous devriez vraiment vous assurer une variable est définie avant de l'utiliser (en particulier en écho à la page). Si la variable provient d'une source non sécurisée ($ _GET, $ _POST, base de données), vous devez faire un certain type de filtrage pour empêcher une violation de la sécurité (cross site scripting (XSS), la falsification de demande de cross site (CSRF), etc .. .) mais si vous sentez que tout est sûr et que vous ne voulez pas montrer des erreurs (par exemple dans la production) définir votre erreur de déclaration à 0.

E.g. error_reporting(0);

Vous pouvez le faire au niveau de php.ini ou par page (définissez error_reporting(0); en haut de la page). Sur une note de côté, en production, vous ne voulez jamais afficher d'erreurs. Connectez-les à la place. En développement, vous voulez voir toutes vos erreurs (E_STRICT).

+0

Je veux les éliminer et ne pas les désactiver – JasonDavis

+0

Si vous voulez les éliminer, vous devrez vérifier si elles sont définies avant de les utiliser (par exemple, si (isset ($ variable)) {echo $ variable ;} ') ou les définir avant de les appeler. Vous recevez l'avertissement car la variable $ n'a pas été définie et cela peut entraîner une violation de sécurité. – Jim

Questions connexes