台灣最大程式設計社群網站
線上人數
447
 
會員總數:245463
討論主題:189220
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> 使用變數和常數
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
使用變數和常數
價值 : 0 QP  點閱數:2210 回應數:0

樓主

站務人員 站長
門外漢
0 1580
542 9
發送站內信

捐贈 VP 給 站務人員
使用變數和常數

變數是指一個在電腦記憶體內具有名稱的儲存位置,裡面包含了資料,例如:一個數字或一個文字字串。
儲存在變數內的資料,稱為變數的值。
變數可讓您儲存、擷取以及處理「值」,而名稱則是方便您了解指令所處理的工作。

宣告及命名變數

請務必遵照指令語言之規則與指示來命名及宣告變數。
雖然變數在使用前,不必先行宣告;不過,宣告變數是個好習慣,它可避免某些錯誤發生。
宣告變數,就是告訴指令引擎,有某個具名變數存在可供指令引用。

VBScript

VBScript 並未強制規定變數在使用前要先宣告,但若能在使用前先行宣告所有的變數,是個比較好的指令程式撰寫習慣。
在 VBScript 中宣告變數,可使用 Dim、Public、或 Private 等陳述式。 例如:

<% Dim UserName %>

在 .asp 檔案中,我們可使用 VBScript 的 Option Explicit 陳述式,來要求變數明確地以 Dim、Private、Public、及 ReDim 等陳述式來宣告。 Option Explicit 陳述式必須出現在任何一個 ASP 指令之後,出現在所有 HTML 文字或指令之前。 這個陳述式只對以 VBScript 撰寫的 ASP 指令有效,在 Jscript 指令中並無效果。

<% Option Explicit %>

<HTML>

<%

Dim strUserName

Public lngAccountNumber

%>

若需有關上述指令的其他資訊,請參閱 VBScript Language Reference,可在 Microsoft Windows Script Technologies Web 站台中找到,網址為 http://msdn.microsoft.com/scripting/。



JScript

雖然 JScript 通常並未規定變數在使用前要先宣告,但若能在使用前先行宣告所有的變數,是個比較好的指令程式撰寫習慣。 要宣告變數,請使用 var 陳述式。 例如:

<% var UserName %>

一般來說,只有當您要使函數內的變數與用在函數外部的全域變數有所區別時,才會需要在 Jscript 中宣告變數。
在這種狀況下,若您沒有區分這兩種變數,JScript 會認定您所引用的變數均為全域變數。
若需有關 var 陳述式的其他資訊,請參閱 JScript Language Reference。
此參考資料可在 Microsoft Windows Script Technologies Web 網站中找到,網址在 http://msdn.microsoft.com/scripting/。


變數領域

變數的領域或存活期限,決定了哪些指令命令可供存取。
在程序中宣告的變數,其領域為區域性的;每回該程序執行時,其變數隨之建立而又銷毀。
程序外的指令是完全無法存取這些變數的。
而程序外所宣告的變數具有全域性;即,所有 ASP 網頁上的指令皆可存取、修改這些變數。

注意事項 將變數限制在程序領域中使用,可增加程式之效能。

宣告變數之時,區域變數和全域變數的名稱可相同。
修改任一種變數的值並不會影響另一變數的值。
如果您沒有宣告變數,很可能會因疏失而修改到全域變數。
舉例來說,下列指令雖然有兩個變數名稱 Y,但傳回的值仍為 1:

<%

Option Explicit

Dim Y

Y = 1

SetLocalVariable

Response.Write Y

Sub SetLocalVariable

Dim Y

Y = 2

End Sub

%>

下列指令傳回之值為 2,因為程式中並未明確宣告變數。 程序將 Y 設定為 2,而指令引擎卻認為程序要修改的是全域變數:

<%

Option Explicit

Dim Y = 1

SetLocalVariable

Response.Write Y

Sub SetLocalVariable

Y = 2

End Sub

%>

為了避免類似問題,最好養成宣告所有變數的習慣。
如果您在 .asp 檔中使用 #include 陳述式,將其他檔案包含進來時,宣告舉動就更形重要了。
雖然被包含進來的指令和原來的 .asp 檔並不相同,但卻被視為 .asp 檔的一部分。
除非我們很清楚的宣告所有變數,否則極易混淆主指令中的變數和被包含進來的指令中的變數名稱,主程式所用的變數一定要和程序有所區分。

賦予變數工作階段領域或應用程式領域

全域變數只能在單一的 .asp 檔案中使用。
如果希望某個變數在該頁以外也可使用,就得賦予該變數一個工作階段或應用程式領域。
工作階段領域之變數可供單一使用者在單一之 ASP 應用程式的所有網頁上使用。
而應用程領域之變數,則可供所有使用者在該應用程式的所有頁面中使用。
用工作階段變數來儲存某一使用者之資訊是個不錯的方式,例如,儲存該使用者之喜好、姓名或身分等。 應用程式變數可用來儲存和該項應用有關之所有使用者資訊,例如,和某個應用有關之問候語或應用程式所需的通用值等。

ASP 還提供了兩個內建物件來儲存變數,即: Session 物件與 Application 物件。

您也可以另外建立工作階段領域或應用程式領域之物件例項。 若需其他資訊,請參閱設定物件領域。

工作階段領域

如欲賦予某一變數工作階段領域,可將其儲存在 Session 物件中,並賦予一個值給物件中的具名項目。 例如,下列指令會將兩個新變數存入 Session 物件中:
<%

Session("FirstName") = "Jeff"

Session("LastName") = "Smith"

%>

若欲擷取 Session 物件中的資訊,請用輸出指令 (<%=) 或 Response.Write 來存取出該具名項目的值。
下面的例子即用輸出指令來顯示 Session("FirstName") 的值:

Welcome <%= Session("FirstName") %>

您可以將使用者的喜好設定儲存在 Session 物件中,然後存取這些喜好設定以決定要傳送給使用者的頁面。 例如,您可在應用程式的第一頁讓使用者指定純文字內容,然後將這個選擇套用至使用者在此應用程式中所拜訪的所有後續頁面上。
<%

strScreenResolution = Session("ScreenResolution")

If strScreenResolution = "Low" Then

%>

這是文字版本的頁面。

<% Else %>

這是多媒體版本的頁面。

<% End If %>

注意事項 一些經常被引用的工作階段領域變數,最好能像上述的例子一樣,指派成區域變數,以提高效能。

應用程式領域

如欲賦予某一變數應用程式領域,可將其儲存在 Application 物件中,並賦予一個值給物件中的具名項目。
例如,下列指令將一個特定應用程式的問候語儲存在 Application 物件中:

<% Application("Greeting") = "Welcome to the Sales Department!" %>

如欲從 Application 物件中擷取資料,則可用 ASP 輸出指令 (<%=) 或 Response.Write,從應用程式中的任一頁面中存取具名項目的值。 下面例子便是使用輸出指令來顯示 Application("Greeting") 的值:



<%= Application("Greeting") %>

同樣地,如果指令中反覆引用到應用程式領域變數,最好將它改成區域變數,以增進效能。



使用常數

所謂常數,是指替代一個數值或字串的名稱。 ASP 提供了一些基本元件,如 ActiveX 資料物件 (ADO),來定義一些在指令中可使用的常數。 元件可在元件類型程式庫中宣告常數,COM 所支援的物件及類型皆可在該檔案中宣告。 只要在 .asp 檔內宣告一個類型程式庫,該 .asp 檔中的任何指令皆可使用這些定義過的常數。 同理,在 Global.asa 檔中亦可宣告一類型程式庫,任何該應用程式的 .asp 檔均可引用這些常數。


如欲宣告類型程式庫,可在 .asp 檔或 Global.asa 檔中以 <METADATA> 標記來定義。 舉例說明,要宣告 ADO 類型程式庫,可使用下列陳述式:

<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->

如果不想用程式庫的通用唯一識別元 UUID,也可使用檔案路徑來引用類型程式庫:



<!-- METADATA TYPE="typelib" FILE="c:\program files\common files\system\ado\msado15.dll"-->

您可在宣告類型資料庫的 .asp 檔案使用 ADO 常數,或在應用程式中的 .asp 檔中使用,而該應用程式應有 Global.asa 包含在內,並有 ADO 類型程式庫之宣告。 在下面例子當中,adOpenKeyset 與 adLockOptimistic 都是 ADO 常數:

<%

'建立並開啟 Recordset 物件。

Set rstCustomerList = Server.CreateObject("ADODB.Recordset")

rstCustomerList.ActiveConnection = cnnPubs

rstCustomerList.CursorType = adOpenKeyset

rstCustomerList.LockType = adLockOptimistic

%>

下表列出一般常用之類型程式庫及 UUID:


類型程式庫 UUID

Microsoft ActiveX Data Objects 2.5 Library {00000205-0000-0010-8000-00AA006D2EA4}

Microsoft CDO 1.2 Library for Windows 2000 Server {0E064ADD-9D99-11D0-ABE5-00AA0064D470}

MSWC Advertisement Rotator Object Library {090ACFA1-1580-11D1-8AC0-00C0F00910F9}

MSWC IIS Log Object Library {B758F2F9-A3D6-11D1-8B9C-080009DCC2FA}


有關 <METADATA> 標記的其他資訊,請參閱 TypeLibrary 宣告。

在 ASP 先前的版本中,有些元件是在檔案中定義常數,而使用這些常數的每個 ASP 檔,均須將這些定義檔案包含進來。
利用 #include 將常數定義包含進來的語法現在仍可使用,但一般說來,類型程式庫比較好用,指令也容易升級。
在未來的 ASP 版本中,元件可能不再提供常數定義檔了。

注意事項 相較於 #include,使用 <METADATA> 標記較能增加 Web 應用程式之效能。

您也可以定義自己的常數。 在 VBScript 裡,可使用 Const 陳述來定義。
而在 Jscript 裡,您可用 var 陳述將常數指派給變數。
如果有些常數經常為不同的 .asp 檔案所使用,您可將定義放在另一個檔案內,每次 .asp 檔欲使用常數時,就將定義檔包括進來。

本篇文章發表於2001-01-15 00:00
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.