首頁  >  文章  >  後端開發  >  開發動態網站 選擇PHP、ASP或ASP.NET

開發動態網站 選擇PHP、ASP或ASP.NET

PHP中文网
PHP中文网原創
2016-08-08 09:33:261402瀏覽

這是一個經常被提出的問題,而且它很容易把人們帶入爭論Linux還是Windows的歧途。這樣的爭論事實上反映出了對於相互競爭的Web開發技術要進行平行分析是多麼困難的一件事情,而這一難度同時因為開發人員對任何可比較作業系統的不同意見而大大增加。

    所以與其繼續參與到這樣的爭論中,我們不如來看看每一項技術對於特定Web開發以及運行環境所表現出的優勢。雖然ASP和PHP的相似程度大於其中任一與ASP.NET的相似程度,我們還是要討論ASP.NET。原因是開發人員常將其與ASP混淆,並且在微軟的努力下ASP.NET的確會在將來完全取代ASP。

基本理論-特點概述
PHP-超文本預處理器(Hypertext Pre-processor)
PHP是開放原始碼伺服器端的腳本語言,在語法上同C語言非常類似。儘管最初是被設計用於基於Linux的Apache Web 伺服器系統,現在的PHP已經被移植到了任何作業系統並與任何標準Web伺服器軟體相容。由此也可以得出PHP的三大主要優勢。首先它是跨平台的技術,因此PHP應用程式可以被方便的移植——當然這也要取決於諸如廠商特定資料庫等需要整合的額外元件。這樣的可移植性也帶來了另一方面的優勢,即絕大部分的Web主機供應商都會支援PHP,因此根據需要更改主機將會非常方便。

第二點,由於PHP同C程式語言有很多相似之處,對於熟悉相關語法的開發人員來說,PHP則非常容易上手——這種語法同樣在Java、JavaScript以及Perl中得到應用。第三,由於是開放原始碼產品,PHP將繼續快速發展,更重要的是相關漏洞修補程式將免費的定期植入到核心庫中。

此外,在一些特定的程式需求下,PHP對於開發人員顯示出了更為誘人的吸引力。首先,PHP有內建庫支援對於圖片及PDF文件的直接建立和相關操作。這意味著當一個應用程式呼叫包含anti-aliased類型文字的動態建立選單圖像,或者是需要導出Acrobat格式頁面時,PHP都將是解決此類問題的理想技術。儘管這些功能在理論上也可以透過其他與PHP競爭的技術來獲得,但往往其他技術需要安裝第三方自訂元件才能實現。

另一點使得PHP成為編寫伺服器腳本最佳選擇的是在處理連接mySOL或Postgres資料庫一類的問題時PHP的良好表現。雖然對於mySOL或Postgres資料庫的存取可以透過ASP技術借助ODBC連接來實現,但這常常需要係統管理員進行額外的設定。幸運的是,這點限制在ASP.NET中得到了改正,當需要建立類似於使用MS SQL Server的直接資料庫連線時可以透過mySQL提供資料。

ASP-動態服務頁面(Active Server Pages)
微軟將ASP引入Windows NT Server 4並將其作為IIS Web伺服器下的動態Web應用程式的預設使用平台。由於它使用VBScript(Visual Basic語言的一個分支),ASP立即被熟悉Microsoft IDE-Visual Studio程式設計的開發人員所追捧。隨著腳本語言的不斷發展,研究人員對ASP並沒有引入太多功能使之加入到技術競爭的行列。因此,在PHP中可以看到的諸如影像操作等功能並沒有整合到ASP中。但開發人員仍可以透過DLL檔案的形式編寫(或安裝)第三方COM物件來完成類似的工作。在伺服器本身允許的情況下,透過這種方式可以編寫程式碼來完成任何動作。當然,造成的缺陷是這將導致為了配置這些服務開發人員不得不與桌面系統進行互動——對於Web開發人員來說這項功能並不是必須的。

ASP的優勢是在企業環境中微軟伺服器幾乎無所不在。此外,MS SQL Server同樣具有廣泛的市場,並且能很好的支援ASP(這並不會讓人感到驚奇)。儘管事實上透過ODBC可以相容於任何資料來源,但SQL Server以及檔案DSN存取(file DSN access)可以在程式碼層級實現。

ASP.NET
是選擇ASP還是PHP的爭論正在隨著.NET的崛起而越來越顯得多餘。的確,過去數年的爭論將隨著選擇Java還是.NET技術(或是兩者)答案的揭曉而結束。 ASP以及ASP.NET的唯一聯繫是二者都使用VBScript。而單獨就.NET而言,它可以使用VBScript以及其他大約20種語言。

對於ASP以及PHP來說,將ASP.NET看作是另一種語言的原因是它運行在完全不同的架構之上。前者是翻譯腳本語言,而.NET則是經過編譯的framework。這就意味著首先Web頁面的運行速度將會有極大提高。同時,原始碼更加安全且更為健壯。此外,ASP.NET為Web程式設計帶來了新的概念——也就是「code-behind頁面」的想法。依照code-behind思想,每一個HTML頁面都是由自身經過編譯的程式化指令來驅動。因此,HTML——或稱之為表現層——很大程度上脫離了應用程式的商業邏輯。儘管這樣的分離也可以透過PHP和ASP來實現,但這並非同ASP.NET一樣屬於自身技術的主要部分。

ASP.NET的另一個好處是它完整的整合了對XML以及Web服務的各種支援。對.NET而言可以使用非常廣泛的安全性以及密碼系統庫,這對於金融機構和企業資料應用程式尤其有用。就缺陷而言,即使是具備豐富經驗的開發人員也會發現使用.NET可能會把自己搞糊塗。不考慮開發者對於所使用的程式語言的熟悉程度,對於Web開發人員來說,在程式範例方面難度的大幅提升可能會成為他們融入ASP.NET的主要障礙。對ASP.NET應用程式來說主機同樣是個問題,ASP.NET並未同ASP或PHP一樣獲得了主機提供者的廣泛支持,無法在同一層級上展開競爭。

實踐-語言比較
變數聲明

 
在VBScript中(ASP和ASP.NET都使用VBScript),在使用變數之前並不一定要對其進行聲明,儘管技術文件通常建議這麼做。使用Option Explicit聲明,開發人員可以透過程式強制進行變數聲明。在PHP中,變數可以被聲明,儘管沒有辦法強制開發人員做到這一點。的確,在使用之前變數都會自動進行宣告。 PHP變數的優點在於變數可以被設定成為其他變數的引用(references),而在VBScript中變數只能透過值來定義。

<%
&#39; VBScript Example
Option Explicit
myVar = 1
myOtherVar = myVar
myVar = 2
 
&#39; myResult will be 3
myResult = myVar + myOtherVar
%>
<?
// PHP Example
$myVar = 1;
&#39;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中,二者沒有性質上的差異。

 

<%
&#39; ASP Example
myFormVal = request.form("myInputField")
myQSval = request.querystring("myQSitem")
myVal = request.item("myFormOrQSitem")
%>
<?
// PHP 4.1+ Example
$myFormVal = $_POST[&#39;myInputField&#39;];
$myQSval = $_REQUEST[&#39;myQSitem&#39;];
 
// PHP 3+ Example
$myFormVal = $HTTP_POST_VARS[&#39;myInputField&#39;];
 
// 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輸出。

<%
&#39;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
&#39;do something
objRS.MoveNext
Loop
%>

 

' ASP.NET Example

以上就是開發動態網站 選擇PHP、ASP還是ASP.NET的內容,更多相關內容請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn