實踐——語言比較
變數聲明
在VBScript中(ASP和ASP.NET都使用VBScript),在使用變數之前並不一定要對其進行聲明,儘管技術文檔通常建議這麼做。使用Option Explicit聲明,開發人員可以通過程式強制進行變數聲明。在PHP中,變數可以被聲明,儘管沒有辦法強制開發人員做到這點。的確,在使用之前變數都自動進行聲明。PHP變數的優點在於變數可以被設定成為其他變數的引用(references),而在VBScript中變數只能通過值來定義。
以下是引用片段:
<%
' VBScript Example
Option Explicit
myVar = 1
myOtherVar = myVar
myVar = 2
' myResult will be 3
myResult = myVar + myOtherVar
%>
<?
// PHP Example
$myVar = 1;
'Use the ampersand to make a reference
$myOtherVar = &$myVar;
$myVar = 2;
// $myResult will be 4
$myResult = $myVar + $myOtherVar;
?>
變數收集
在PHP以及ASP中使用表單以及query string變數的方法非常相似。有很多辦法可以訪問表單以及query string變數的集合,例如通過name或者將其作為數組。在ASP.NET中情況則有很多不同,尤其是對於表單域。不同於盲目的尋找提交過的表單變數,code-behind可以對HTML頁面中的每一個表單域了如指掌,並可以按照任何已知事件的執行為條件觸發對這些表單域的值進行檢查。其中一個事件是“postback”,當表單被使用者提交時此事件被觸發。其他的事件可以是用戶端的程式,並且可以通過JavaScript來觸發。在ASP.NET中,二者沒有性質上的區別。
以下是引用片段:
<%
' ASP Example
myFormVal = request.form("myInputField")
myQSval = request.querystring("myQSitem")
myVal = request.item("myFormOrQSitem")
%>
<?
// PHP 4.1+ Example
$myFormVal = $_POST['myInputField'];
$myQSval = $_REQUEST['myQSitem'];
// PHP 3+ Example
$myFormVal = $HTTP_POST_VARS['myInputField'];
// If register_globals = on
$myVal = $myFormOrQSitem;
?>
<!-- ASP.NET example -->
<html>
<script language="VB" runat=server>
Sub SubmitBtn_Click(Sender As Object, E As EventArgs)
Message.Text = "Hello " & Name.Text
End Sub
</script>
<body>
<form action="action.aspx" method="post" runat="server">
Name: <asp:textbox id="Name" runat="server"/>
<asp:button text="OK"
runat="server"/>
<asp:label id="Message" runat="server"/>
</form>
</body>
</html>
字串串連(String Concatenation)
PHP似乎對此問題給予了足夠的重視,它允許將變數插入到字串中而無需考慮通常的串聯(Concatenation)問題。ASP.NET則把整個過程弄得比較麻煩,需要藉助其StringBuilder類,但由此ASP.NET的運行速度也會快很多。
以下是引用片段:
<?
// PHP Example
$link = mysql_connect("host", "user", "password")or die("mysql_error());
mysql_select_db("database") or die("Could not select database");
$query = "SELECT * FROM Table";
$result = mysql_query($query) or die(mysql_error());
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
foreach ($line as $col_value) {
//do something
}
}
?>
串連資料庫
對於資料庫的串連問題,每種技術都表現出了各自突出的規範性。首先,每種情況都要建立到資料庫的串連。對於PHP,在建立之後選擇資料庫(對於ASP以及ASP.NET則將在串連階段完成)。隨後將建立一個詢問,並將其傳送給資料庫,由此可能產生也可能不會產生一條返回記錄。
由於在本質上ASP.NET更為以對象為導向,並且支援複雜的錯誤處理(error handling),因此無論是相對於PHP還是ASP,在完成簡單任務方面ASP.NET可能會需要編寫更多的代碼。但在優勢方面,ASP.NET完成顯示資料功能所需要的代碼則大大少於PHP以及ASP——尤其如果使用內建的datagrid控制來自動建立HTML輸出。
以下是引用片段:
<%
'ASP Example
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver={SQL Server};Server=MyServerName;" & _
"Database=myDatabaseName;Uid=;Pwd="
const strSQL = "SELECT * FROM Table" Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.OpenstrSQL, objConn
Do While Not objRS.EOF
'do something
objRS.MoveNext
Loop
%>
' ASP.NET Example
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
<script language="VB" runat="server">
Sub Page_Load(Sender As Object, E As EventArgs)
Dim MyConn As SqlConnection = New SqlConnection("server=(local). . . ")
Dim MyComm As SqlCommand = New SqlCommand("select * from Table", MyConn)
MyConn.Open()
Dim dr As SqlDataReader = MyComm.ExecuteReader()
MyDataGrid.DataSource = dr
MyDataGrid.DataBind()
MyConn.Close()
End Sub
</script>
<body>
<ASP:DataGrid id="MyDataGrid" runat="server"
Width="600"
BackColor="#FFFFFF"
BorderColor="#000000"
ShowFooter="false"
CellPadding=2
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#EEEEEE"
EnableViewState="false"
/>
</body>
</html>
結論
選擇ASP、PHP還是ASP.NET將最終取決於應用程式的需要,以及運行程式的系統內容。開發人員對於相似程式設計語言或範例的熟悉程度同樣可以作為選擇的因素。記住沒有完美的方法和個人實際情況可以表明哪種技術是最佳選擇。比如,使用ASP.NET為一個Windows伺服器建立一個單頁面的表單郵件應用程式似乎有些大材小用,但對於ASP來說這是極佳的應用環境。如果一個網站需要同Linux Apache伺服器上的mySQL資料庫連接,那麼使用ASP或者ASP.NET則會顯得力不從心。如果能夠提前詳細考慮使用者的個人要求,那麼開發人員在這些相互競爭的技術中進行選擇的過程則已成功了一半。