webForumDet fria alternativet

Hämta variabel från funktion

ASP

7 svar · 906 visningar · startad av skyman

Medlem sedan juli 20012 450 inlägg
Frågan#1

Hjälp.
Jag har en funktion och i den så laddas en läng sträng med html-kod som jag vill använda mig av i sidan på ett lämpligt ställe.

Ska det räcka med att definiera variabeln som public/global inne i funktionen för att jag ska kunna hämta den utanför? :q

Medlem sedan juli 20012 450 inlägg
#2

Smartarse skyman... :e

Jag definierade den som en public utanför funktionen så funkade det!!! :r

Medlem sedan dec. 200012 464 inlägg
#3

Det är ingen bra programmering att använda globala variabler. Låt funktionen returnera strängen

function buildHtml(p1,p2,p3)

buidHtml = "<html><body>" & p1 'etc

end function

htmlString = buildHtml("Hej","hopp","ditt")
Medlem sedan juni 20019 024 inlägg
#4

Ursprungligen av LarsG Det är ingen bra programmering att använda globala variabler.

Intressant det där. Jag har gjort ett forum som nu enbart kräver ett par smärre justeringar innan det är färdigt, och däri använder jag ett antal globala variabler som defineras i en include-fil som körs allra först på sidorna. Bör jag göra på något annat sätt (och finns det något annat sätt)?

Medlem sedan juni 20008 205 inlägg
#5

Det finns alltid ett annat sätt. Globala variabler är Dåliga Saker och bör undvikas i största möjliga utsträckning, eftersom man i princip alltid kan använda något annat.
Vill man till exempel göra sin databaskoppling globalt åtkomlig utan globala variabler, kan man göra så här:

Dim myVerySecretDbConn
set myVerySecretDbConn = Nothing

Function getDbConnection()
    if myVerySecretDbConn = nothing then
        set myVerySecretDbConn = ' öppna databasen...
    end if
    getDbConnection = myVerySecretDbConn
End Function
Medlem sedan juni 20019 024 inlägg
#6

spango:
Okej. Jag har gjort detsamma med mina databaskopplingar, men det är inte där problemen ligger. Jag har inställningar (ex. namnet på forumet, antal trådar per forum som ska visas, e-mail adresser etc.) som körs i början av filerna. Kanske skulle man kunna göra något i stil med:

Function GetConfig(strConfigName)
   Dim strCfg

   Select Case Lcase(strConfigName)
      Case "forumname": strCfg = "Jehovas"
      Case "admin e-mail": strCfg = "god@jehovas.com"
      Case "threads per page": strCfg = 34
   End Select

   GetConfig = strCfg
End Function

strNameOfThisBloodyForum = GetConfig("forumname")

Finns det något bättre sätt? För det rör sig om ganska många inställningar.

Medlem sedan mars 20007 896 inlägg
#7

Ännu ett annat sätt är att skicka med variablerna som argument, men som by reference. Då "slipper" funktionerna returnera något, men variabeln ändras ändå.

Sub Edit ( ByRef str )
     str = str & " Bajen!"
End Sub

Dim var
var = "Heja"
Edit ( var )
Response.Write var

Resulterar i:
Heja Bajen!

Eller SKA i.v.f. göra det.

Medlem sedan juni 20008 205 inlägg
#8

Config-grejer är lite en annan sak, men det bästa är ju att använda konstanter (konstanter är Rätt Och Bra även om de är globala):

Const FORUM_NAME = "Jehovas"
Const ADMIN_EMAIL = "god@jehovas.org"
Const THREADPP = 34

Skälet till att man inte ska ha globala variabler är att om man ändrar värdet på den globala variabeln i en massa olika subbar/funktioner så blir det hemskt svårt att hitta felkällor m.m.. Man undviket inte bara globaler för att det är skoj ;)

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)