Active Server Pages/變數型別
在本節中,您將學習 Active Server Pages 中的變數。這包括命名約定,如何宣告變數,不同的基本型別以及命名約定。學習完本節後,您應該對可用的變數型別以及如何在 Web 應用程式中使用不同型別有深刻的理解。
ASP 中的所有變數都是鬆散型別的。這意味著您不需要宣告變數的型別。這也意味著您可以將任何變數的值分配給任何其他變數。這個規則有一些例外,我們將在後面看到。
基本上,ASP 中的每個變數都有主要型別 Variant。它是 "variant" 意味著它所儲存的值的型別可以改變。基本上,ASP 直譯器將在您在一個表示式中將多個變數或型別組合在一起時自動處理所有型別之間的轉換。
ASP 中使用的變數有三種不同的作用域。第一種是頁面作用域,這意味著變數在整個持續時間內都可用。這些變數通常在頁面的頂部宣告。第二種型別的變數是過程作用域變數,它們在過程或函式宣告中宣告。第三種類型的變數是在類定義中使用,用於面向物件的程式設計。
<%
Dim sStr1 ' page-scoped variable
....
Procedure DoSomething
Dim mStr2 ' procedure-scoped variable
End Procedure
Function DoSomething
Dim mStr2 ' function-scoped variable
End Function
Class clsTest
Private msStr4 ' class-scoped variable
Public msStr5 ' class-scoped variable
End Class
%>
頁面作用域變數對您的網頁上包含的所有程式碼(包括過程和函式)可見。您甚至可以在類中訪問頁面作用域變數,儘管良好的面向物件設計會強烈反對這種做法。
過程作用域變數只在定義它們的範圍內可見。在一個頁面作用域變數和一個過程作用域變數使用相同變數名是完全可以接受的。請記住,當您這樣做時,您將隱藏頁面作用域變數,並且無法在過程中訪問它。
類作用域變數只能透過類的例項訪問。簡化的 ASP 指令碼語言中沒有靜態變數或靜態方法的概念。您需要使用 ObjectName.VariableName 語法才能直接訪問成員變數。只有宣告為 Public 的變數才能以這種方式訪問。私有類變數只能由類中定義的程式碼訪問。關於在 Active Server Pages 中使用類的更多資訊將在後面討論。
要有效,ASP 變數名必須遵循以下規則
- 必須以字母字元開頭
- 所有其他字元必須是字母數字字元或下劃線 ("_")
- 名稱長度不能超過 255 個字元
- 名稱在定義的作用域內必須是唯一的
- 名稱不能與內建函式、過程和物件的保留字相同。
變數名與語句一樣,不區分大小寫。這意味著如果您使用名稱 "myVar" 宣告一個變數,則可以使用 "MYVAR" 或 "myvar" 甚至 "MyVaR" 來訪問它。
避免使用保留字並使識別變數型別更容易的一種方法是使用命名約定。通常,變數名的第一個字母或幾個字母表示它儲存的資訊。
示例
- nCount n 代表整數或數字,儲存用於計數某個東西的值,例如控制迴圈。
- sName s 代表字串,儲存表示名稱的值。
- bIsActive b 代表布林值,儲存真或假值,在這種情況下,如果某些東西處於活動狀態,則為真,否則為假。
遵循命名約定可以幫助避免混亂的程式碼,並養成良好的程式設計習慣。它還允許其他人使用您的程式碼,並幫助除錯或修改它。除了命名約定,還可以使用註釋來記錄變數在 ASP 頁面中的用途。
示例
Dim nCount ' 用於在控制迴圈中計數值。Dim sName ' 用於儲存使用者在網頁表單中輸入的名稱。Dim bIsActive ' 用於測試使用者的帳戶是否處於活動狀態。
您將在本文件的後面瞭解更多關於命名約定的內容。
要宣告變數,您可以對頁面和過程作用域變數使用 Dim 語句。在 Dim 語句之後,您可以放置一個用逗號分隔的變數名列表。如果您願意,您也可以將每個變數放在單獨的一行上。這允許您為每個宣告的變數添加註釋。
<%
Dim sAction ' form action
Dim sQuery ' database query
Dim I, J, K
%>
您應該將變數放置在頁面或過程中的固定位置。通常,大多數人將宣告放置在頁面的最頂部(開頭)或過程的頂部。其他人認為將變數宣告放置在第一次使用它們的位置上方更有意義。
當我們談論基本型別時,我們指的是不能分解為更小的基本型別的低階變數型別。基本上,這些是 Active Server Pages 理解的 "內建" 變數。
這些有時被稱為變數的 "子型別",因為變數的主要型別是 "variant"。每個變數可能具有以下表格中顯示的子型別之一。如果您使用過其他程式語言,那麼這些基本型別對您來說非常熟悉。
| 型別名 | 值 | 記憶體 | 示例 |
|---|---|---|---|
| Boolean | True 或 False | 2 位元組? | true |
| Byte | 0 到 255 | 1 位元組 | 127 |
| String | 任何 Unicode 字元 | 無限 | "unicode: ê" |
| Int | -32,768 到 32,767 | 2 位元組 | 147 |
| Long | -2,147,483,648 到 2,147,483,647 | 4 位元組 | 3458972 |
| Single | 1.401298E-45 到 3.402823E38 (pos) -3.402823E38 到 -1.401298E-45 (neg) |
4 位元組 | 23.546234 |
| Double | 4.94065645841247E-324 到 1.79769313486232E308 (pos) -1.79769313486232E308 到 -4.94065645841247E-324 (neg) |
8 位元組 | 43872452.23445 |
| Currency | -922,337,203,685,477.5808 和 922,337,203,685,477.5807 | 8 位元組 | 132412.34 |
| Datetime | 01/01/100 到 12/31/9999 | 8 位元組 | '09/23/2004 12:34 AM' |
| Object | 物件引用 | 8 位元組? | Server.CreateObject("...") |
除了上面顯示的值之外,以下特殊值也可以分配給 Active Server Page 變數
| 型別名 | 值 | 記憶體 | 示例 |
|---|---|---|---|
| Empty | vbEmpty | 2 位元組? | vbEmpty |
| Null | null | 2 位元組? | null |
空值是新宣告變數的預設值(從未分配任何值)。如果在布林上下文中測試,它等效於 "false",如果在字串上下文中測試,它等效於空字串 ("")
您不需要過多地擔心設定變數的型別。這幾乎是自動為您完成的。如果您想設定分配給變數的型別,您可以使用與每種型別相對應的 ASP 轉換函式。
此外,還有驗證函式可用於確保變數與指定型別相容。這並不意味著變數具有該子型別。相反,這意味著變數可以成功地轉換為該型別。
| 型別名 | 轉換 | 驗證 |
|---|---|---|
| Boolean | CBool | n/a |
| Byte | CByte | IsNumeric |
| String | CStr | n/a |
| Int | CInt | IsNumeric |
| Long | CLng | IsNumeric |
| Single | CSng | IsNumeric |
| Double | CDbl | IsNumeric |
| Currency | CCur | IsNumeric |
| Datetime | CDate | IsDate |
| Object | n/a | IsObject |
| Empty | n/a | IsEmpty |
| Null | n/a | IsNull |
字面量是您插入 ASP 程式碼並在表示式中使用的值。字面量本身沒有用處,但在賦值語句或輸出語句等語句中使用時
<%
' examples of literal values
Dim sString, nInt, fFloat, dDate, bBool
sString = "Hello There"
nInt = 1234
fFloat = -25.324
dDate = DateSerial(2004, 10, 28)
bBool = True
%>
您會注意到在 ASP 中沒有辦法指定日期字面量。因此,您需要使用函式呼叫來使用 **DateSerial** 構建日期值,或者可以使用 **Now()** 獲取當前日期和時間。
字面量的值受上述基本型別表中指定的限制約束。如果您嘗試使用超出任何型別可接受範圍的值,您將收到一條錯誤訊息指示此事實,並且您的 ASP 頁面將終止執行。
在某些情況下,您可能希望建立“命名常量”,而不是一直使用字面量。如果您建立了一個將在站點上的多個指令碼中使用的通用包含檔案,這將特別有用。您可以使用 **Const** 關鍵字定義常量,如下所示
<%
Const PI = 3.141592654
Const RECS_PER_PAGE = 25
Const FSO_FORREADING = 1
Const FSO_FORWRITING = 0
%>
通常的做法是使用全大寫變數作為常量定義,儘管這不是必需的。它只是使您的程式碼更易於閱讀和維護。
命名約定是在您的網站上使用的所有變數的標準命名方式。有各種不同的方法用於命名變數,一整章都可以專門討論這個主題。其中最受歡迎的一種是匈牙利命名法,其中變數名稱的第一個字母指示變數的主要子型別。
| 型別名 | 字母 | 示例 |
|---|---|---|
| Boolean | b | bIsMale |
| Byte | z | zAge |
| String | s | sFirstname |
| Int | n | nAge |
| Long | l | lPageHits |
| Single | f | fScore |
| Double | d | dMass |
| Currency | m | mBalance |
| Datetime | d | dExpiration |
| Object | o | oFSO |
微軟為 Visual Basic 提出的標準是為他們的變數使用 3 個字母的命名約定。這對閱讀和維護程式碼來說更清楚。有些人認為這對於輕量級指令碼語言來說有點過頭。
| 型別名 | 字母 | 示例 |
|---|---|---|
| Boolean | bln | blnIsMale |
| Byte | byt | bytAge |
| String | str | strFirstname |
| Int | int | intAge |
| Long | lng | lngPageHits |
| Single | sng | sngScore |
| Double | dbl | dblMass |
| Currency | cur | curBalance |
| Datetime | dat | datExpiration |
| Object | obj | objFSO |