7
votes

Comment savoir si une variable dans ASP a été déclarée

Permettez-moi de commencer par dire que je suis un développeur PHP, pas une ASP One. (Et j'aimerais vraiment que l'ASP avait Isset () .) Et je travaille dans un environnement direct, je n'ai donc pas vraiment la possibilité de faire des tests.

Toutes les ressources que je ' J'ai trouvé suggérer différentes façons de tester l'existence d'une variable.

Voici ce que j'essaie de faire:

sur certaines pages, j'ai défini une variable qui contient une valeur pour Un robots tag: xxx

toutes les pages incluent header.asp . Dans mon fichier d'en-tête, je tiens à tester si dsp_robots a une valeur et si oui, émet une valeur de cette valeur, sinon, ne produisez rien.

je pense qui testez si dsp_robots a une valeur peut ressembler à ceci: xxx

meilleures pratiques en PHP indique que lorsque vous utilisez une variable qui peut ou Peut ne pas exister, vous devriez toujours tester si (isset ($ var)) {...} (ne pas le faire, cela déclenchera un avis si la variable n'existe pas). < P> Y a-t-il une telle chose dans ASP - c'est-à-dire que j'ai vraiment besoin de tester s'il existe ou puis-je simplement tester s'il a une valeur?


3 commentaires

Est-ce que l'une des deux réponses ci-dessous travaille pour vous? :-)


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


Eh bien, vous pourriez peut-être décider quelle réponse vous avez mieux aimé et l'accepter (même si vous êtes allé avec une approche différente) juste pour des raisons de récompenser au moins un de ceux qui prenaient son temps et ses efforts pour tenter de vous aider. Juste dire '.


4 Réponses :


5
votes

@jazzerus: Je recommande de mettre le code dans header.asp dans un sous , quelque chose comme xxx

.. .et alors dans vos pages d'appel incluent header.asp en haut et utilisez xxx

si vous ne définissez pas dsp_robots < / code> sur cette page, alors laissez simplement le deuxième paramètre vide ("")

alors vérifiant si la variable est vide ou non dans le sous devrait suffire: xxx


1 commentaires

Est-il possible d'appeler une fonction à l'intérieur de l'en-tête.asp si j'y incluais à l'aide d'un SSI: ?



11
votes

UST en passant, votre question ne concerne pas l'ASP classique, c'est une question de Vbscript. VBScript peut se produire dans les scripts en dehors de l'ASP. Et la compilation n'est pas faite dans VBScript, car c'est une langue interprétée. Nevermind.

Je pense qu'il y a une certaine confusion ici - et votre question semble avoir plus à voir avec des variables non attribuées que des variables non déclarées. Pour les variables non déclarées, voir ci-dessous.

pour ininitialisé, essayez la fonction isempty . Pour vérifier NULL, essayez la fonction isnull . xxx

affichera:

false

true

détecter des variables non déclarées < / strong>

Si vous incluez l'option explicite dans votre en-tête, l'utilisation d'une variable non déclarée provoquera une erreur d'exécution. Si votre script n'est pas d'option explicite, il ne générera pas d'erreur et il n'ya aucune fonction qui vous indiquera si la variable a été déclarée ou non. Cela semble bâclé et c'est, mais c'était intentionnel.

La seule façon de vous échapper est de définir en réalité une option explicite, puis de piéger l'erreur que vous obtiendrez lorsque vous essayez d'utiliser la variable non déclarée. Si vous traquez cette erreur particulière, vous constaterez qu'il a Err.Number = 500. Donc, les suivants feront ce que vous voulez: xxx

bien sûr, si vous définissez l'option Explicite et votre code est répandu avec des variables non déclarées, alors vous obtiendrez des erreurs que vous aurez été lancées partout, vous aurez donc besoin de définir une erreur de reprise d'erreur en haut de votre code afin que vous puissiez l'ignorer avec succès et ne le piègent que quand tu veux.

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

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


2 commentaires

Je l'avais à l'origine marqué ASP.NET, qui a été redirigé par DOK en tant que ASP-Classic. En ce qui concerne l'option explicite, le logiciel de panier utilisé sur ce site ne l'a pas défini et est un site en direct, je ne veux vraiment pas faire de changement pouvant causer de nombreuses erreurs, même si elle est dans l'intérêt de ASP meilleures pratiques. Je pense que je vais mal que ça ne va pas. Au lieu de dim'ing une variable, puis , je devrais effectuer une vérification de l'en-tête.asp pour déterminer quel fichier il est inclus dans.


Si vous n'avez pas d'option explicite activée, vous pouvez également utiliser isempty pour vérifier les variables non déclarées. Vous ne pourrez pas dire la différence entre non déclaré et non assuré, cependant.



3
votes

Quoi de: XXX

Cela semble avoir travaillé pour moi.


0 commentaires

0
votes

J'utilise la fonction Vartype pour détecter si la variable est définie. Si la variable testée n'est pas définie, Vartype renvoie la valeur Verror (10). Intéressant de noter que le paramètre facultatif ne peut pas être le dernier paramètre ASP lancère une erreur.

function Sample(p1,p2,p3,p4)
    if VarType(p3) <> vbError then
        'do something with p3
    end if
end function

ThisWorks=Sample(1,2,,3)
ThisFails=Sample(1,2,3,)


0 commentaires