語法和常見任務對比
以下各部分比較了 php 和 .net 的語法,并介紹了如何完成某些非常常見的編程任務。
注釋
php 允許您使用 c、c++ 和 unix shell 樣式語法在代碼中插入注釋,注釋指示器中的任何內容都不會被執行。
一般來講,要在 asp.net 中注釋出 visual basic .net 代碼,需要使用 <%-- 打開注釋塊,并使用 --%> 關閉注釋塊。
表 2 顯示了這兩種環境中的注釋。
表 2:服務器端注釋
php asp.net
/*
這是被注釋出的
文本塊
*/
<%--
這是注釋
--%>
變量
雖然 php 和 visual basic .net 具有類似的語言構造,但語法卻截然不同。由于 visual basic .net 是基于 oop 模型構建的,因而變量的聲明要比 php 中變量的聲明更嚴謹(在 php 中聲明變量時只需在變量名之前添加一個 $ 符號)。
在 visual basic .net 中聲明變量時,要指定它的變量名和特性。變量的聲明語句是 dim 關鍵字。它的位置和內容決定了變量的特性。變量具有級別(例如局部變量和模塊變量)、數據類型、生存期以及可訪問性。
雖然這種方法最初看上去要比在 php 中指定變量復雜,但實際上它會給開發人員帶來方便。asp.net 致力于幫助開發人員創建可靠的應用程序,而指定數據類型可以使諸如變量清理、調試、異常和錯誤處理以及代碼維護等任務變得更加簡單。
表 3 顯示了在兩種環境中聲明變量的示例。
表 3:變量聲明
php visual basic .net
$head_count
$foo
$x
$obj
dim head_count as integer
dim foo as string
dim x as date
dim obj as object
聲明數據類型
聲明語句中的 as 子句用于定義所聲明變量的數據類型或對象類型。您可以為變量指定以下任意類型:
基本數據類型,例如 boolean、long 或 decimal
復合數據類型,例如數組或結構
visual basic 或其他應用程序中的對象類型或類,例如 label 或 textbox
您可以在一個語句中聲明多個相同類型的變量而不必重復數據類型。下面的語句將變量 numstudents、numgta 和 numprofessors 聲明為 integer 類型:
dim numstudents, numgta , numprofessors as integer ' 三個變量都是 integer 類型。
有關數據類型的詳細信息,請參閱 data types。有關面向對象編程的詳細信息,請參閱 object-oriented programming in visual basic。
聲明生存期
變量的生存期是指變量可供使用的時間段。使用 dim 語句聲明的局部變量僅在其執行過程中存在。過程終止時,該過程的所有局部變量都將消失,這些變量的值也將丟失。
生存期這個概念很有用,因為它使開發人員在創建應用程序時不必考慮在大型應用程序中出現的許多問題,例如有效的內存管理。通過為變量選擇正確的生存期,可以使 .net 對未在使用的變量執行清理操作。
有關生存期的詳細信息,請參閱 lifetime。
聲明范圍
局部變量是在過程(過程與函數類似)中聲明的變量。非局部變量是在過程之外但在類或結構中聲明的變量。
在類或結構中,非局部變量的類別取決于該變量是否被共享。使用 shared 關鍵字聲明的變量是共享變量,它只有一個副本并且在類或結構的所有實例中共享。如果不使用 shared 關鍵字,則該變量為實例變量,并且針對類或結構的每個實例都將創建一個單獨的變量副本。實例變量的給定副本僅可用于為之創建該副本的實例。
變量的范圍是指可以引用它而不必限定其名稱的所有代碼集。變量的范圍取決于聲明變量的位置。位于給定區域中的代碼可以使用在該區域中定義的變量而不必限定其名稱。聲明范圍時,將遵循以下規則:
共享變量或實例變量的范圍是在其中聲明了該變量的結構或類。
局部變量的范圍是在其中聲明了該變量的過程。
但是,如果您在塊中聲明一個局部變量,則它的范圍將只限于該塊。局部變量在定義它的控制塊中處于活動狀態。控制塊可以是過程、if 語句以及循環語句等。
有關范圍的詳細信息,請參閱 scope。
聲明可訪問性
.net 支持變量的可訪問性,從而使開發人員可以控制哪些代碼能夠訪問特定的變量。例如,如果要為某個公式設置一些常數,并且要確保這些常數不會被它們所在類以外的其他代碼更改,則可以使用 private 按如下所示聲明該變量:
private myconstant as integer
變量的可訪問性由聲明語句中使用的一個或多個關鍵字 dim、public、protected、friend、protected friend 或 private 確定。開發過程中通常只使用 public 和 private。
您可以使用上述任意關鍵字來聲明模塊、結構、類或實例變量。過程中只允許使用 dim 關鍵字,并且可訪問性始終為 private。
輸出
php 中輸出數據的典型方式是使用 echo() 語言構造。asp.net 中與此最相似的是 response.write() 方法(或 <%= %> 構造,它只是 response.write() 的簡寫形式)。表 4 顯示了向頁面寫入值的基本語法。
表 4:基本輸出
php visual basic .net
<?php
$hello = "hi how are you/n";
echo $hello;
?
>
<%
dim hello as string = "hi how are you" & vbcrlf
response.write(hello)
%>
然而,這些用于向瀏覽器發送輸出的方法主要是為了保持與傳統 asp 的向后兼容性。asp.net 提供了新的基于控件且面向事件的模型,您只需在服務器控件上設置屬性即可將數據輸出到瀏覽器中。通過這種技術可以將布局與代碼清楚地分開,從而簡化了維護工作,并且在復雜情況下所需的代碼要比 php 少得多。
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)
thedate.text = datetime.now
end sub
</script>
the current date is: <asp:label id="thedate" runat="server"/>
此示例聲明了一個名為 thedate 的服務器端標簽 (label) 控件,并在該頁面的 load 事件中將此標簽的 text 屬性設置為當前的日期和時間。此代碼的 html 輸出與其他兩個版本相同,不同的是 label 控件將自身呈現為 span 標記(其中包含所設置的任何標簽文本)。
條件處理
if/else
php 具有若干條件處理表達式,例如 for、while、switch 和 foreach,但最常用的是 if/else 表達式。visual basic .net 有幾個非常類似的構造,其語法也很類似。表 5 對 php 和 visual basic .net 中的等價條件邏輯進行了比較。
表 5:基本條件邏輯
php visual basic .net
if ($a > $b) {
print "a is bigger than b";
} elseif ($a == $b) {
print "a is equal to b";
} else {
print "a is smaller than b";
}
if a > b
response.write ("a is bigger
than b")
elseif a = b then
response.write ("a is equal to
b")
else
response.write ("a is smaller
than b")
end if
切換
切換語句是大多數編程語言的常見語言構造,用于通過多個值對單個表達式進行測試。它常用于替換包含多個 elseif/else 塊的 if 語句。
圖 6 對 php 的 switch 語句與 visual basic 的 select case 語句進行了比較。
表 6:switch 與 select case 語句的對比
php visual basic .net
switch ($i) {
case 0:
print "i equals 0";
break;
case 1:
print "i equals 1";
break;
case 2:
print "i equals 2";
break;
default:
print "i is not equal to 0,
1 or 2";
}
select case number i
case 0
description = "0"
response.write ("i equals 0")
case 1
description = "1"
response.write ("i equals 1")
case 2
description = "2"
response.write ("i equals 2")
case else
description = " i is not equal
to 0, 1 or 2"
response.write ("i is not
equal to 0, 1 or 2 ")
end select
循環
另一個非常常見的控制構造是循環。php 和 .net 都支持若干不同的常見循環類型。
表 7:for 循環
php visual basic .net
for ($i = 1; $i <= 100; $i++) {
print $i;
}
dim sum as integer = 0
dim counter as integer
for counter = 1 to 100 step 5
sum += counter
next
for i = 1 to 100
response.write (i)
next i
在 visual basic 中,這種循環類型被稱為 for...next 循環,而在 php 中則稱為 for 循環。在此示例中,我們使用了 += 運算符作為 sum = sum + counter 的簡寫方式。在 php 中,可以使用 break; 語句來中斷循環。而 for...next 循環可以通過 exit for 語句中斷。
條件循環
只要某個條件計算為 true,條件循環便會持續重復一組指令。表 8 顯示了這兩種語言中的基本條件循環示例。
表 8:條件循環
php visual basic .net
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
dim counter i as integer = 1
do while counter i <= 10
response.write(i)counter i += 1
loop
在 visual basic 中,這種循環類型稱為 do...loop 語句,或 while 循環。php 也支持 do...while 循環,該循環與 while 循環非常類似,不同之處在于它是在每個循環的結尾而不是開始檢查真假表達式。 do...while 循環與常規 while 循環的主要差別是前者會確保運行第一個循環(因為只在該循環的結尾檢查真假表達式),而常規的 while 循環則不一定運行。(因為它在每個循環的開始檢查真假表達式,如果它一開始便計算為 false,該循環將立即結束執行。)
下面給出了一個 php 中這種情況的示例:
$i = 0;
do {
print $i;
}
while ($i>0);
此循環只運行一次,因為在第一次循環后檢查真假表達式時,表達式計算為 false($i 不大于 0),所以循環將停止執行。
在 visual basic .net 中,您可以執行同樣的操作:
dim counter i as integer = 0
do
response.write (i)counter
loop while counter i > 0
但是,visual basic .net 支持內置的循環功能,這是 php 所不支持的。該功能將對條件進行計算,直到條件為真時為止。
foreach 循環
php 4(而非 php 3)包含一個 foreach 構造,它與 asp.net 以及某些其他語言中的構造非常類似。它只是為循環數組提供了一個簡單的途徑。foreach 只適用于數組,如果試圖將其用于其他數據類型的變量或未初始化的變量,則會導致錯誤。visual basic .net 中與此等價的循環是 for each...next 語句。表 9 顯示了在這兩種語言中循環數組的示例。
表 9:foreach 循環
php visual basic .net
$i = 0;
foreach($a as $v) {
print "/$key[$i]$v /n";
$i++;
}
for each v in a
response.write a(v) (v & vbcrlf)
next
新聞熱點
疑難解答
圖片精選