欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

白刃之戰(zhàn):PHP vs. ASP.NET(節(jié)選)-架構(gòu)比較

 更新時(shí)間:2006年09月28日 00:00:00   作者:  
   作者:Robert Lair and Jason Lefebvr Intensity Software, Inc.

  翻譯:EasyChen Exlcsoft.com

  概觀

  開發(fā)界正在進(jìn)行的一個(gè)爭論是PHP和ASP中哪一個(gè)平臺更適合網(wǎng)站開發(fā)。這場爭論由于微軟的ASP.net帶來的巨大變化而進(jìn)入了新時(shí)期。和ASP 3.0比起來,ASP.NET采用了全新的設(shè)計(jì),有著很多新的特性和優(yōu)點(diǎn)。究竟ASP.NET 會給PHP和ASP之間的爭論帶來什么樣的影響呢?本文將為你提供這個(gè)問題的答案的相關(guān)信息。

  架構(gòu)比較

  PHP

  PHP4.0以Zend Technologies的開源引擎Zend Engine為核心。當(dāng)用戶瀏覽器向一個(gè)由PHP實(shí)現(xiàn)的網(wǎng)絡(luò)服務(wù)器發(fā)出請求時(shí),這個(gè)請求被傳給Zend Engine,它將對php腳本進(jìn)行編譯。如果編譯順利, 編譯后的代碼將被傳遞給生成發(fā)送給客戶端的最終HTML代碼的Zend Engine Executor。從開發(fā)者角度看,PHP 4.0的框架既有優(yōu)點(diǎn)也有缺點(diǎn)。

  因?yàn)镻HP是開源的,所以它得到了很多不同平臺和web服務(wù)器的支持。雖然比以前的PHP引擎大,Zend Engine仍然是輕便和強(qiáng)壯的。作為擴(kuò)展,PHP也支持面向?qū)ο?,允許用戶建立自己的類和對象。但是,由于某些原因,PHP不是真正的面向?qū)ο箝_發(fā)環(huán)境。最好的一個(gè)例子是類成員函數(shù)和屬性的作用域。在PHP中,一個(gè)類中的所有變量可以從外部讀寫,這使得類的實(shí)現(xiàn)無法隱藏。

  另外,PHP不是強(qiáng)類型語言(就是說,如果你比較字符4和整數(shù)4,結(jié)果是相同的),這在架構(gòu)大型程式時(shí)帶來問題,也使得程式的調(diào)試變得困難。使得調(diào)試更為困難的是,你甚至不需要聲明變量,這和關(guān)掉explicit 選項(xiàng)的ASP很像。如果PHP在腳本中遇到新的變量,它只會靜靜的創(chuàng)建它。

  雖然被認(rèn)為是寬松的PHP框架的靈活性,不過大概每個(gè)開發(fā)者在一些情況下都會花數(shù)小時(shí)去解決由這個(gè)特性導(dǎo)致的BUG。對象在PHP中是語言級變量。它們在很大程度上被當(dāng)作簡單變量類型處理。(就像整型和字符型變量一樣)當(dāng)進(jìn)行像變量賦值和將對象作為參數(shù)傳遞給函數(shù)的操作時(shí),整個(gè)對象被復(fù)制。這將導(dǎo)致低效。另外,不可預(yù)知的運(yùn)行時(shí)行為會經(jīng)常發(fā)生。

  PHP缺少一些其它絕大多少現(xiàn)代開發(fā)框架擁有的關(guān)鍵元素。其中最重要的一個(gè)是結(jié)構(gòu)化異常捕捉。雖然可以給進(jìn)程錯(cuò)誤注冊一個(gè)error handler,對于語言本身來說并不方便。由于"try . . . catch"錯(cuò)誤捕捉的缺席,很多PHP開發(fā)者完全忘記了錯(cuò)誤捕捉或者在很窄的范圍中使用。

  ASP.NET

  ASP.NET的核心是Microsoft .NET框架。這個(gè)框架提供了common language runtime (CLR)和類庫,ASP.NET就建立在這之上。

  當(dāng)ASP.NET資源第一次被請求時(shí),高層語言代碼(像Microsoft Visual Basic® .NET 或者C#)被編譯成Microsoft Intermediate Language (MSIL) code。這個(gè)代碼將由CLR運(yùn)行以產(chǎn)生用于網(wǎng)頁服務(wù)的機(jī)器代碼。

  ASP.NET強(qiáng)制開發(fā)者使用真正的面向?qū)ο蠓绞竭M(jìn)行程式設(shè)計(jì)。所有的對象都是真實(shí)的OO對象,支持如繼承、多態(tài)(方法的重載)和封裝的特性。

  另外,ASP.NET中的所有語言都是強(qiáng)類型的。舉個(gè)例子,要比較整數(shù)4和字符4,你需要先將變量轉(zhuǎn)換為整型,反之亦然。

  ASP.NET采用事件驅(qū)動編程模型,這意味著,代碼片斷由在程式運(yùn)行時(shí)可能發(fā)生的事件聯(lián)系起來。

  舉例而言,在ASP.NET 頁面中的Page_Load()事件放置當(dāng)瀏覽器讀取Web form時(shí)將要運(yùn)行的代碼。有很多附加事件和ASP.NET Page object相聯(lián)系,開發(fā)者可以在它們生命周期中的任何時(shí)間執(zhí)行代碼。同樣的,一個(gè)Web form上的各個(gè)控件都有一系列可在觸發(fā)時(shí)可執(zhí)行代碼的事件。比如,通過在一個(gè)Web form添加一個(gè)button,你可以添加一個(gè)方法(被叫做一個(gè)delegate)來在用戶點(diǎn)擊button時(shí)執(zhí)行。幾乎所有控件都有一個(gè)或者多個(gè)事件。

  

  你可以訪問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)文章

最新評論