实践——语言比较
变量声明
在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" onclick="submitbtn_click"
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则会显得力不从心。如果能够提前详细考虑用户的个人要求,那么开发人员在这些相互竞争的技术中进行选择的过程则已成功了一半。
新闻热点
疑难解答
图片精选