2010-11-04 19 views
4

Permettez-moi de commencer en disant que je suis un développeur PHP, pas un ASP. (Et je souhaite vraiment ASP avait isset().) Et je travaille dans un environnement en direct, donc je n'ai pas vraiment l'occasion de faire des tests. Toutes les ressources que j'ai trouvées suggèrent différentes façons de tester l'existence d'une variable.Comment savoir si une variable dans ASP a été déclarée

Voici ce que je suis en train de faire:

Sur certaines pages, je définir une variable qui détient une valeur pour un robot <meta> tag:

dim dsep_robots 
dsep_robots = "nofollow,noindex" 

Toutes les pages comprennent header.asp. Dans mon fichier d'en-tête, je veux tester si dsep_robots a une valeur et si c'est le cas, afficher cette valeur, sinon, ne rien afficher.

Je pense que vérifier si dsep_robots a une valeur pourrait ressembler à ceci:

if not dsep_robots = "" then 
    '... 
end if 

Les meilleures pratiques en état PHP que lorsque vous utilisez une variable qui peut ou peut ne pas exister, vous devez toujours test if (isset($var)) {...} (ne pas le faire déclenchera un avis si la variable n'existe pas).

Y a-t-il une telle chose dans ASP - c'est-à-dire ai-je vraiment besoin de tester si elle existe, ou est-ce que je peux simplement tester si elle a une valeur?

+0

Est-ce que l'une des deux réponses ci-dessous a fonctionné pour vous? :-) – stealthyninja

+0

J'ai décidé d'aller avec une approche différente, où ce n'était plus un problème. – Jazzerus

+1

Eh bien, vous pourriez peut-être décider quelle réponse vous préférez et l'accepter (même si vous avez adopté une approche différente) juste pour récompenser au moins un de ceux qui ont pris le temps et l'effort d'essayer de vous aider . Dites juste. – Cyberherbalist

Répondre

4

@Jazzerus: Je vous recommande de mettre le code dans header.asp dans un Sub, quelque chose comme

Sub outputHeader(ByRef MyTitle, Byref dsep_robots)  
    'contents of header.asp 
End Sub 

... puis dans vos pages appelant comprennent header.asp droit à le haut et utiliser

outputHeader "Title for this page", "value you want dsep_robots to have for page" 

Si vous ne définissez pas dsep_robots sur cette page, puis il suffit de laisser le second paramètre vide (« »)

Ensuite, il suffit vérifier si la variable est vide ou non dans le Sub devrait suffire:

If dsep_robots <> "" Then 
    Response.Write dsep_robots 
End If 
+0

Est-il possible d'appeler une fonction dans header.asp si je l'inclut avec un SSI: ''? – Jazzerus

+0

@Jazzerus: Oui, c'est le cas. – stealthyninja

8

ust par ailleurs, votre question ne concerne pas ASP classique, il est une question VBScript. VBScript peut se produire dans des scripts en dehors de ASP. Et la compilation n'est pas faite dans VBScript, parce que c'est un langage interprété. Ça ne fait rien.

Je pense qu'il y a une certaine confusion ici - et votre question semble avoir plus à voir avec les variables non initialisées que les variables non déclarées. Pour les variables non déclarées, voir ci-dessous. Pour non initialisé, essayez la fonction IsEmpty. Pour vérifier null, essayez la fonction IsNull.

dim x 
x = 1 
dim t 
Response.write isempty(x) 
Response.write "<br>" 
Response.write isempty(t) 

affichage Will:

Faux

vrai

Détection des variables non déclarées

Si vous ajoutez l'option explicite dans votre tête, l'utilisation d'une volonté variable non déclarée provoquer une erreur d'exécution. Si votre script n'est pas Option Explicit, il ne générera pas d'erreur et aucune fonction ne vous indiquera si la variable a été déclarée ou non. Cela semble bâclé, et ça l'est, mais c'était intentionnel. La seule façon de vous en sortir est de définir réellement Option Explicit, puis d'intercepter l'erreur que vous obtiendrez lorsque vous essaierez d'utiliser la variable non déclarée. Si vous piégez cette erreur particulière, vous trouverez qu'il a Err.Number = 500. Donc, ce qui suit va faire ce que vous voulez:

Option Explicit 

dim x 

On Error Resume Next 

Response.Write dsep_robots 
If Err.Number > 0 Then 
    Response.Write Err.Number 
end if 

Bien sûr, si vous définissez l'option explicite et votre code est truffé de noir les variables alors vous aurez des erreurs lancées partout, donc vous devrez mettre On Error Resume Next en haut de votre code afin que vous puissiez l'ignorer avec succès, et ne l'attraper que quand vous le souhaitez.

Par ailleurs, voici la référence en ligne de Microsoft pour VBScript:

http://msdn.microsoft.com/en-us/library/d1wf56tt(v=VS.85).aspx

+0

Je l'avais à l'origine étiqueté ASP.NET, qui a été reclassé par DOK comme ASP-classique. Quant à Option Explicit, le logiciel de panier utilisé sur ce site ne le définit pas, et étant un site en ligne, je ne veux vraiment pas faire de changement qui pourrait causer beaucoup d'erreurs, même si c'est dans l'intérêt de Meilleures pratiques ASP. Je pense que je vais mal. Au lieu de Dim'ing une variable, puis '', je devrais plutôt effectuer une vérification à l'intérieur de header.asp pour déterminer le fichier dans lequel il est inclus – Jazzerus

+0

Si vous Si l'option Explicit n'est pas activée, vous pouvez également utiliser 'IsEmpty' pour rechercher des variables non déclarées. Cependant, vous ne serez pas en mesure de faire la différence entre non déclaré et non initialisé. –

2

Qu'en est-:

If NOT IsEmpty(myvariable) Then... 

qui semble avoir travaillé pour moi.