白刃之戰(zhàn):PHP vs. ASP.NET(節(jié)選)-架構(gòu)比較
更新時間:2006年09月28日 00:00:00 作者:
作者:Robert Lair and Jason Lefebvr Intensity Software, Inc.
翻譯:EasyChen Exlcsoft.com
概觀
開發(fā)界正在進(jìn)行的一個爭論是PHP和ASP中哪一個平臺更適合網(wǎng)站開發(fā)。這場爭論由于微軟的ASP.net帶來的巨大變化而進(jìn)入了新時期。和ASP 3.0比起來,ASP.NET采用了全新的設(shè)計,有著很多新的特性和優(yōu)點(diǎn)。究竟ASP.NET 會給PHP和ASP之間的爭論帶來什么樣的影響呢?本文將為你提供這個問題的答案的相關(guān)信息。
架構(gòu)比較
PHP
PHP4.0以Zend Technologies的開源引擎Zend Engine為核心。當(dāng)用戶瀏覽器向一個由PHP實現(xiàn)的網(wǎng)絡(luò)服務(wù)器發(fā)出請求時,這個請求被傳給Zend Engine,它將對php腳本進(jìn)行編譯。如果編譯順利, 編譯后的代碼將被傳遞給生成發(fā)送給客戶端的最終HTML代碼的Zend Engine Executor。從開發(fā)者角度看,PHP 4.0的框架既有優(yōu)點(diǎn)也有缺點(diǎn)。
因為PHP是開源的,所以它得到了很多不同平臺和web服務(wù)器的支持。雖然比以前的PHP引擎大,Zend Engine仍然是輕便和強(qiáng)壯的。作為擴(kuò)展,PHP也支持面向?qū)ο?,允許用戶建立自己的類和對象。但是,由于某些原因,PHP不是真正的面向?qū)ο箝_發(fā)環(huán)境。最好的一個例子是類成員函數(shù)和屬性的作用域。在PHP中,一個類中的所有變量可以從外部讀寫,這使得類的實現(xiàn)無法隱藏。
另外,PHP不是強(qiáng)類型語言(就是說,如果你比較字符4和整數(shù)4,結(jié)果是相同的),這在架構(gòu)大型程式時帶來問題,也使得程式的調(diào)試變得困難。使得調(diào)試更為困難的是,你甚至不需要聲明變量,這和關(guān)掉explicit 選項的ASP很像。如果PHP在腳本中遇到新的變量,它只會靜靜的創(chuàng)建它。
雖然被認(rèn)為是寬松的PHP框架的靈活性,不過大概每個開發(fā)者在一些情況下都會花數(shù)小時去解決由這個特性導(dǎo)致的BUG。對象在PHP中是語言級變量。它們在很大程度上被當(dāng)作簡單變量類型處理。(就像整型和字符型變量一樣)當(dāng)進(jìn)行像變量賦值和將對象作為參數(shù)傳遞給函數(shù)的操作時,整個對象被復(fù)制。這將導(dǎo)致低效。另外,不可預(yù)知的運(yùn)行時行為會經(jīng)常發(fā)生。
PHP缺少一些其它絕大多少現(xiàn)代開發(fā)框架擁有的關(guān)鍵元素。其中最重要的一個是結(jié)構(gòu)化異常捕捉。雖然可以給進(jìn)程錯誤注冊一個error handler,對于語言本身來說并不方便。由于"try . . . catch"錯誤捕捉的缺席,很多PHP開發(fā)者完全忘記了錯誤捕捉或者在很窄的范圍中使用。
ASP.NET
ASP.NET的核心是Microsoft .NET框架。這個框架提供了common language runtime (CLR)和類庫,ASP.NET就建立在這之上。
當(dāng)ASP.NET資源第一次被請求時,高層語言代碼(像Microsoft Visual Basic® .NET 或者C#)被編譯成Microsoft Intermediate Language (MSIL) code。這個代碼將由CLR運(yùn)行以產(chǎn)生用于網(wǎng)頁服務(wù)的機(jī)器代碼。
ASP.NET強(qiáng)制開發(fā)者使用真正的面向?qū)ο蠓绞竭M(jìn)行程式設(shè)計。所有的對象都是真實的OO對象,支持如繼承、多態(tài)(方法的重載)和封裝的特性。
另外,ASP.NET中的所有語言都是強(qiáng)類型的。舉個例子,要比較整數(shù)4和字符4,你需要先將變量轉(zhuǎn)換為整型,反之亦然。
ASP.NET采用事件驅(qū)動編程模型,這意味著,代碼片斷由在程式運(yùn)行時可能發(fā)生的事件聯(lián)系起來。
舉例而言,在ASP.NET 頁面中的Page_Load()事件放置當(dāng)瀏覽器讀取Web form時將要運(yùn)行的代碼。有很多附加事件和ASP.NET Page object相聯(lián)系,開發(fā)者可以在它們生命周期中的任何時間執(zhí)行代碼。同樣的,一個Web form上的各個控件都有一系列可在觸發(fā)時可執(zhí)行代碼的事件。比如,通過在一個Web form添加一個button,你可以添加一個方法(被叫做一個delegate)來在用戶點(diǎn)擊button時執(zhí)行。幾乎所有控件都有一個或者多個事件。
你可以訪問Microsoft在QuickStart指南中提供的關(guān)于Class Browser的例子,可以在http://samples.gotdotnet.com/quickstart/aspplus/samples/classbrowser/vb/classbrowser.aspx在線運(yùn)行它。
Easy注:這篇文章譯自MSDN,是 白刃之戰(zhàn):PHP vs. ASP.NET 的一部分。文章的其他部分Easy將視事件和精力選譯部分。
翻譯:EasyChen Exlcsoft.com
概觀
開發(fā)界正在進(jìn)行的一個爭論是PHP和ASP中哪一個平臺更適合網(wǎng)站開發(fā)。這場爭論由于微軟的ASP.net帶來的巨大變化而進(jìn)入了新時期。和ASP 3.0比起來,ASP.NET采用了全新的設(shè)計,有著很多新的特性和優(yōu)點(diǎn)。究竟ASP.NET 會給PHP和ASP之間的爭論帶來什么樣的影響呢?本文將為你提供這個問題的答案的相關(guān)信息。
架構(gòu)比較
PHP
PHP4.0以Zend Technologies的開源引擎Zend Engine為核心。當(dāng)用戶瀏覽器向一個由PHP實現(xiàn)的網(wǎng)絡(luò)服務(wù)器發(fā)出請求時,這個請求被傳給Zend Engine,它將對php腳本進(jìn)行編譯。如果編譯順利, 編譯后的代碼將被傳遞給生成發(fā)送給客戶端的最終HTML代碼的Zend Engine Executor。從開發(fā)者角度看,PHP 4.0的框架既有優(yōu)點(diǎn)也有缺點(diǎn)。
因為PHP是開源的,所以它得到了很多不同平臺和web服務(wù)器的支持。雖然比以前的PHP引擎大,Zend Engine仍然是輕便和強(qiáng)壯的。作為擴(kuò)展,PHP也支持面向?qū)ο?,允許用戶建立自己的類和對象。但是,由于某些原因,PHP不是真正的面向?qū)ο箝_發(fā)環(huán)境。最好的一個例子是類成員函數(shù)和屬性的作用域。在PHP中,一個類中的所有變量可以從外部讀寫,這使得類的實現(xiàn)無法隱藏。
另外,PHP不是強(qiáng)類型語言(就是說,如果你比較字符4和整數(shù)4,結(jié)果是相同的),這在架構(gòu)大型程式時帶來問題,也使得程式的調(diào)試變得困難。使得調(diào)試更為困難的是,你甚至不需要聲明變量,這和關(guān)掉explicit 選項的ASP很像。如果PHP在腳本中遇到新的變量,它只會靜靜的創(chuàng)建它。
雖然被認(rèn)為是寬松的PHP框架的靈活性,不過大概每個開發(fā)者在一些情況下都會花數(shù)小時去解決由這個特性導(dǎo)致的BUG。對象在PHP中是語言級變量。它們在很大程度上被當(dāng)作簡單變量類型處理。(就像整型和字符型變量一樣)當(dāng)進(jìn)行像變量賦值和將對象作為參數(shù)傳遞給函數(shù)的操作時,整個對象被復(fù)制。這將導(dǎo)致低效。另外,不可預(yù)知的運(yùn)行時行為會經(jīng)常發(fā)生。
PHP缺少一些其它絕大多少現(xiàn)代開發(fā)框架擁有的關(guān)鍵元素。其中最重要的一個是結(jié)構(gòu)化異常捕捉。雖然可以給進(jìn)程錯誤注冊一個error handler,對于語言本身來說并不方便。由于"try . . . catch"錯誤捕捉的缺席,很多PHP開發(fā)者完全忘記了錯誤捕捉或者在很窄的范圍中使用。
ASP.NET
ASP.NET的核心是Microsoft .NET框架。這個框架提供了common language runtime (CLR)和類庫,ASP.NET就建立在這之上。
當(dāng)ASP.NET資源第一次被請求時,高層語言代碼(像Microsoft Visual Basic® .NET 或者C#)被編譯成Microsoft Intermediate Language (MSIL) code。這個代碼將由CLR運(yùn)行以產(chǎn)生用于網(wǎng)頁服務(wù)的機(jī)器代碼。
ASP.NET強(qiáng)制開發(fā)者使用真正的面向?qū)ο蠓绞竭M(jìn)行程式設(shè)計。所有的對象都是真實的OO對象,支持如繼承、多態(tài)(方法的重載)和封裝的特性。
另外,ASP.NET中的所有語言都是強(qiáng)類型的。舉個例子,要比較整數(shù)4和字符4,你需要先將變量轉(zhuǎn)換為整型,反之亦然。
ASP.NET采用事件驅(qū)動編程模型,這意味著,代碼片斷由在程式運(yùn)行時可能發(fā)生的事件聯(lián)系起來。
舉例而言,在ASP.NET 頁面中的Page_Load()事件放置當(dāng)瀏覽器讀取Web form時將要運(yùn)行的代碼。有很多附加事件和ASP.NET Page object相聯(lián)系,開發(fā)者可以在它們生命周期中的任何時間執(zhí)行代碼。同樣的,一個Web form上的各個控件都有一系列可在觸發(fā)時可執(zhí)行代碼的事件。比如,通過在一個Web form添加一個button,你可以添加一個方法(被叫做一個delegate)來在用戶點(diǎn)擊button時執(zhí)行。幾乎所有控件都有一個或者多個事件。
你可以訪問Microsoft在QuickStart指南中提供的關(guān)于Class Browser的例子,可以在http://samples.gotdotnet.com/quickstart/aspplus/samples/classbrowser/vb/classbrowser.aspx在線運(yùn)行它。
Easy注:這篇文章譯自MSDN,是 白刃之戰(zhàn):PHP vs. ASP.NET 的一部分。文章的其他部分Easy將視事件和精力選譯部分。
相關(guān)文章
asp.net GridView中超鏈接的使用(帶參數(shù))
在GridView中,點(diǎn)擊鏈接列跳轉(zhuǎn)到指定頁面的實現(xiàn)代碼,需要的朋友可以參考下。2010-03-03
asp.net 中將表單提交到另一頁 Code-Behind(代碼和html在不同的頁面)
To send Server control values from a different Web Forms page2009-04-04
Asp.net MVC實現(xiàn)生成Excel并下載功能
這篇文章主要為大家詳細(xì)介紹了Asp.net MVC實現(xiàn)生成Excel并下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
MVC 5 第二章 MVC5應(yīng)用程序項目結(jié)構(gòu)
通過本章學(xué)習(xí),你將了解到一個MVC 5應(yīng)用程序的項目組成以及項目文件的相關(guān)信息,從而更好地架構(gòu)設(shè)計出自己的項目結(jié)構(gòu)。2014-06-06
asp.net 站點(diǎn)URLRewrite使用小記
asp.net的底層運(yùn)作已經(jīng)也亂談過一番, 今天記一下URLRewrite的方法。2009-11-11

