国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

動態(tài)網(wǎng)站web開發(fā) PHP、ASP還是ASP.NET

2024-05-04 23:02:03
字體:
供稿:網(wǎng)友
 這是一個經(jīng)常被提出的問題,并且它很容易把人們帶入爭論linux還是windows的歧途。這樣的爭論事實上反映出了對于相互競爭的技術(shù)要進(jìn)行并行分析是多么困難的一件事情,而這一難度同時因為開發(fā)人員對任何可比較操作系統(tǒng)的不同意見而大大增加。
 
    所以與其繼續(xù)參與到這樣的爭論中,我們還不如來看看每一項技術(shù)對于特定以及運行環(huán)境所表現(xiàn)出的優(yōu)勢。盡管asp和php的相似程度大于其中任意一種與asp.net的相似程度,我們還是要討論asp.net。原因是開發(fā)人員常常將其與asp相混淆,并且在微軟的努力下asp.net的確會在將來完全取代asp。

基本理論——特點概述
php——超文本預(yù)處理器(hypertext pre-processor)
php是開放源代碼服務(wù)器端的腳本語言,在語法上同c語言非常類似。盡管最初是被設(shè)計用于基于linux的apache web 服務(wù)器系統(tǒng),現(xiàn)在的php已經(jīng)被移植到了任何操作系統(tǒng)并兼容任何標(biāo)準(zhǔn)web服務(wù)器軟件。由此也可以得出php的三大主要優(yōu)勢。首先它是跨平臺的技術(shù),因此php應(yīng)用程序可以被方便的移植——當(dāng)然這還要取決于諸如廠商特定數(shù)據(jù)庫等需要集成的額外組件。這樣的可移植性還帶來了另一方面的優(yōu)勢,即絕大部分的web主機提供商都會支持php,因此根據(jù)需要更改主機將會非常方便。

第二點,由于php同c編程語言有很多相似之處,對于熟悉相關(guān)語法的開發(fā)人員來說,php則非常容易上手——這種語法同樣在java、javascript以及perl中得到應(yīng)用。第三,由于是開放源代碼產(chǎn)品,php將繼續(xù)快速發(fā)展,更為重要的是相關(guān)漏洞補丁將免費的定期植入到核心庫中。

此外,在一些特定的編程需求下,php對于開發(fā)人員顯示出了更為誘人的吸引力。首先,php有內(nèi)建庫支持對于圖片及pdf文檔的直接創(chuàng)建和相關(guān)操作。這意味著當(dāng)一個應(yīng)用程序調(diào)用包含有anti-aliased類型文本的動態(tài)創(chuàng)建菜單圖像,或者是需要導(dǎo)出acrobat格式頁面時,php都將是解決此類問題的理想技術(shù)。盡管這些功能在理論上也可以通過其他與php相競爭的技術(shù)獲得,但往往其他技術(shù)需要安裝第三方自定義組件才能實現(xiàn)。

另一點使得php成為編寫服務(wù)器腳本最佳選擇的是在處理連接mysol或者postgres數(shù)據(jù)庫一類的問題時php的良好表現(xiàn)。盡管對于mysol或者postgres數(shù)據(jù)庫的訪問可以通過asp技術(shù)借助odbc連接來實現(xiàn),但這常常需要系統(tǒng)管理員進(jìn)行額外的配置。幸運的是,這點限制在asp.net中得到了改正,當(dāng)需要建立類似于使用ms sql server的直接數(shù)據(jù)庫連接時可以通過mysql提供數(shù)據(jù)。

asp——動態(tài)服務(wù)頁面(active server pages)
微軟將asp引入windows nt server 4并將其作為iis web服務(wù)器下的動態(tài)web應(yīng)用程序的默認(rèn)使用平臺。由于它使用vbscript(visual basic語言的一個分支),asp立即被熟悉microsoft ide——visual studio編程的開發(fā)人員所追捧。隨著腳本語言的不斷發(fā)展,研究人員對asp并沒有引入太多功能使之加入到技術(shù)競爭的行列。因此,在php中可以看到的諸如圖像操作等功能沒有集成到asp中。但開發(fā)人員仍然可以通過dll文件的形式編寫(或者安裝)第三方com對象來完成類似的工作。在服務(wù)器自身允許的情況下,通過這種方式可以編寫代碼來完成任何動作。當(dāng)然,造成的缺陷是這將導(dǎo)致為了配置這些服務(wù)開發(fā)人員不得不與桌面系統(tǒng)進(jìn)行交互——對于人員來說這項功能并不是必須的。
 
asp的優(yōu)勢是在企業(yè)環(huán)境中微軟服務(wù)器幾乎無處不在。此外,ms sql server同樣具有廣泛的市場,并且能很好的支持asp(這并不會讓人感到驚奇)。盡管事實上通過odbc可以兼容任何數(shù)據(jù)來源,但sql server以及文件dsn訪問(file dsn access)可以在代碼一級得到實現(xiàn)。

asp.net
是選擇asp還是php的爭論正在隨著.net的崛起而越來越顯得多余。的確,過去長達(dá)數(shù)年的爭論將隨著是選擇java還是.net技術(shù)(或是兩者)答案的揭曉而終結(jié)。asp以及asp.net的唯一聯(lián)系是二者都使用vbscript。而單獨就.net而言,它可以使用vbscript以及其他大約20種語言。

對于asp以及php來說,將asp.net看作是另外一種語言的原因是它運行在完全不同的構(gòu)架之上。前者是翻譯腳本語言,而.net則是經(jīng)過編譯的framework。這就意味著首先web頁面的運行速度將會有極大提高。同時,源代碼更加安全且更為健壯。此外,asp.net給web編程帶來了新的理念——即“code-behind頁面”的思想。按照code-behind思想,每一個html頁面都是由自身經(jīng)過編譯的程序化指令進(jìn)行驅(qū)動。因此,html——或稱之為表現(xiàn)層——很大程度上脫離了應(yīng)用程序的商業(yè)邏輯。盡管這樣的分離也可以通過php和asp來實現(xiàn),但這并非同asp.net一樣屬于自身技術(shù)的主要部分。

asp.net的另一好處是它完整的集成了對xml以及web服務(wù)的各種支持。對.net而言可以使用非常廣泛的安全以及密碼系統(tǒng)庫,這對于金融機構(gòu)和企業(yè)數(shù)據(jù)應(yīng)用程序尤為有用。就缺陷而言,即使是具備豐富經(jīng)驗的開發(fā)人員也會發(fā)現(xiàn)使用.net可能把自己搞糊涂。不考慮開發(fā)者對于所使用的編程語言的熟悉程度,對于人員來說,在程序范例方面難度的大幅提升可能會成為他們?nèi)谌隺sp.net的主要障礙。對asp.net應(yīng)用程序來說主機同樣是個問題,asp.net并未同asp或者php一樣獲得了主機提供商的廣泛支持,無法在同一級別上展開競爭。

實踐——語言比較
變量聲明
 
 
在vbscript中(asp和asp.net都使用vbscript),在使用變量之前并不一定要對其進(jìn)行聲明,盡管技術(shù)文檔通常建議這么做。使用option explicit聲明,開發(fā)人員可以通過程序強制進(jìn)行變量聲明。在php中,變量可以被聲明,盡管沒有辦法強制開發(fā)人員做到這點。的確,在使用之前變量都自動進(jìn)行聲明。php變量的優(yōu)點在于變量可以被設(shè)置成為其他變量的引用(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或者將其作為數(shù)組。在asp.net中情況則有很多不同,尤其是對于表單域。不同于盲目的尋找提交過的表單變量,code-behind可以對html頁面中的每一個表單域了如指掌,并可以按照任何已知事件的執(zhí)行為條件觸發(fā)對這些表單域的值進(jìn)行檢查。其中一個事件是“postback”,當(dāng)表單被用戶提交時此事件被觸發(fā)。其他的事件可以是客戶端的程序,并且可以通過javascript來觸發(fā)。在asp.net中,二者沒有性質(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似乎對此問題給予了足夠的重視,它允許將變量插入到字符串中而無需考慮通常的串連(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

}

}

?>

連接數(shù)據(jù)庫
對于數(shù)據(jù)庫的連接問題,每種技術(shù)都表現(xiàn)出了各自突出的規(guī)范性。首先,每種情況都要建立到數(shù)據(jù)庫的連接。對于php,在建立之后選擇數(shù)據(jù)庫(對于asp以及asp.net則將在連接階段完成)。隨后將建立一個詢問,并將其傳送給數(shù)據(jù)庫,由此可能產(chǎn)生也可能不會產(chǎn)生一條返回記錄。

 
由于在本質(zhì)上asp.net更為以對象為導(dǎo)向,并且支持復(fù)雜的錯誤處理(error handling),因此無論是相對于php還是asp,在完成簡單任務(wù)方面asp.net可能會需要編寫更多的代碼。但在優(yōu)勢方面,asp.net完成顯示數(shù)據(jù)功能所需要的代碼則大大少于php以及asp——尤其如果使用內(nèi)建的datagrid控制來自動創(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)用程序的需要,以及運行程序的系統(tǒng)環(huán)境。開發(fā)人員對于相似編程語言或范例的熟悉程度同樣可以作為選擇的因素。記住沒有完美的方法和個人實際情況可以表明哪種技術(shù)是最佳選擇。比如,使用asp.net為一個windows服務(wù)器創(chuàng)建一個單頁面的表單郵件應(yīng)用程序似乎有些大材小用,但對于asp來說這是極佳的應(yīng)用環(huán)境。如果一個站點需要同linux apache服務(wù)器上的mysql數(shù)據(jù)庫連接,那么使用asp或者asp.net則會顯得力不從心。如果能夠提前詳細(xì)考慮用戶的個人要求,那么開發(fā)人員在這些相互競爭的技術(shù)中進(jìn)行選擇的過程則已成功了一半。

  • 本文來源于網(wǎng)頁設(shè)計愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 嘉禾县| 怀来县| 平顺县| 泸西县| 宁津县| 栖霞市| 固镇县| 托里县| 炎陵县| 剑阁县| 宣化县| 马边| 石林| 霍林郭勒市| 兴国县| 中卫市| 连云港市| 嘉义县| 曲松县| 开封市| 汽车| 瑞昌市| 昔阳县| 鹿邑县| 湄潭县| 德安县| 张家港市| 渝中区| 深泽县| 锡林郭勒盟| 张掖市| 阿鲁科尔沁旗| 留坝县| 房产| 达孜县| 遂昌县| 曲靖市| 高雄县| 嘉荫县| 广西| 武邑县|