實(shí)踐——語(yǔ)言比較
變量聲明
在vbscript中(asp和asp.net都使用vbscript),在使用變量之前并不一定要對(duì)其進(jìn)行聲明,盡管技術(shù)文檔通常建議這么做。使用option explicit聲明,開(kāi)發(fā)人員可以通過(guò)程序強(qiáng)制進(jìn)行變量聲明。在php中,變量可以被聲明,盡管沒(méi)有辦法強(qiáng)制開(kāi)發(fā)人員做到這點(diǎn)。的確,在使用之前變量都自動(dòng)進(jìn)行聲明。php變量的優(yōu)點(diǎn)在于變量可以被設(shè)置成為其他變量的引用(references),而在vbscript中變量只能通過(guò)值來(lái)定義。
以下是引用片段:
<%
' 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變量的方法非常相似。有很多辦法可以訪問(wèn)表單以及query string變量的集合,例如通過(guò)name或者將其作為數(shù)組。在asp.net中情況則有很多不同,尤其是對(duì)于表單域。不同于盲目的尋找提交過(guò)的表單變量,code-behind可以對(duì)html頁(yè)面中的每一個(gè)表單域了如指掌,并可以按照任何已知事件的執(zhí)行為條件觸發(fā)對(duì)這些表單域的值進(jìn)行檢查。其中一個(gè)事件是“postback”,當(dāng)表單被用戶提交時(shí)此事件被觸發(fā)。其他的事件可以是客戶端的程序,并且可以通過(guò)javascript來(lái)觸發(fā)。在asp.net中,二者沒(méi)有性質(zhì)上的區(qū)別。
以下是引用片段:
<%
' 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" onclick="submitbtn_click"
runat="server"/>
<asp:label id="message" runat="server"/>
</form>
</body>
</html>
字符串連接(string concatenation)
php似乎對(duì)此問(wèn)題給予了足夠的重視,它允許將變量插入到字符串中而無(wú)需考慮通常的串連(concatenation)問(wèn)題。asp.net則把整個(gè)過(guò)程弄得比較麻煩,需要借助其stringbuilder類,但由此asp.net的運(yùn)行速度也會(huì)快很多。
以下是引用片段:
<?
// 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
}
}
?>
連接數(shù)據(jù)庫(kù)
對(duì)于數(shù)據(jù)庫(kù)的連接問(wèn)題,每種技術(shù)都表現(xiàn)出了各自突出的規(guī)范性。首先,每種情況都要建立到數(shù)據(jù)庫(kù)的連接。對(duì)于php,在建立之后選擇數(shù)據(jù)庫(kù)(對(duì)于asp以及asp.net則將在連接階段完成)。隨后將建立一個(gè)詢問(wèn),并將其傳送給數(shù)據(jù)庫(kù),由此可能產(chǎn)生也可能不會(huì)產(chǎn)生一條返回記錄。
由于在本質(zhì)上asp.net更為以對(duì)象為導(dǎo)向,并且支持復(fù)雜的錯(cuò)誤處理(error handling),因此無(wú)論是相對(duì)于php還是asp,在完成簡(jiǎn)單任務(wù)方面asp.net可能會(huì)需要編寫更多的代碼。但在優(yōu)勢(shì)方面,asp.net完成顯示數(shù)據(jù)功能所需要的代碼則大大少于php以及asp——尤其如果使用內(nèi)建的datagrid控制來(lái)自動(dòng)創(chuàng)建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>
結(jié)論
選擇asp、php還是asp.net將最終取決于應(yīng)用程序的需要,以及運(yùn)行程序的系統(tǒng)環(huán)境。開(kāi)發(fā)人員對(duì)于相似編程語(yǔ)言或范例的熟悉程度同樣可以作為選擇的因素。記住沒(méi)有完美的方法和個(gè)人實(shí)際情況可以表明哪種技術(shù)是最佳選擇。比如,使用asp.net為一個(gè)windows服務(wù)器創(chuàng)建一個(gè)單頁(yè)面的表單郵件應(yīng)用程序似乎有些大材小用,但對(duì)于asp來(lái)說(shuō)這是極佳的應(yīng)用環(huán)境。如果一個(gè)站點(diǎn)需要同linux apache服務(wù)器上的mysql數(shù)據(jù)庫(kù)連接,那么使用asp或者asp.net則會(huì)顯得力不從心。如果能夠提前詳細(xì)考慮用戶的個(gè)人要求,那么開(kāi)發(fā)人員在這些相互競(jìng)爭(zhēng)的技術(shù)中進(jìn)行選擇的過(guò)程則已成功了一半。
新聞熱點(diǎn)
疑難解答
圖片精選