PHP ASP.NET的較量
PHP和ASP.NET都可以構(gòu)建復(fù)雜的Web應(yīng)用程序(例如電子商務(wù)站點(diǎn)、Intranet和企業(yè)門戶),但兩者之間卻存在若干重要差別。與PHP不同,ASP.NET并不是一種語言或分析器,而是Microsoft .NET Framework中的一組用于構(gòu)建Web應(yīng)用程序和XML Web Service的技術(shù)。同PHP一樣,Microsoft ASP.NET頁面在服務(wù)器上執(zhí)行并生成標(biāo)記(例如HTML、WML或XML),標(biāo)記將發(fā)送給桌面應(yīng)用程序或移動(dòng)應(yīng)用程序。但不同的是,ASP.NET為開發(fā)Web頁面提供了強(qiáng)大的、面向?qū)ο蟮囊约坝墒录?qū)動(dòng)的編程模型,同時(shí)仍保留了PHP開發(fā)人員所習(xí)慣的那種簡單性。
PHP與ASP.NET比,ASP.NET應(yīng)用程序是基于強(qiáng)大的面向?qū)ο缶幊?OOP)模式,而不是基于腳本模式。這樣便可以獲得更為嚴(yán)謹(jǐn)?shù)腛OP功能,例如繼承、封裝和反射。雖然大多數(shù)基本的簡單操作可以輕松地從PHP轉(zhuǎn)換到ASP.NET,但要轉(zhuǎn)換更為復(fù)雜的應(yīng)用程序卻并不這么簡單,這需要仔細(xì)的規(guī)劃和考慮,并采用更符合OOP的方法。
本文假設(shè)讀者具有PHP方面的經(jīng)驗(yàn),并且對(duì)編程和軟件開發(fā)有著基本了解。本文首先從代碼方面對(duì)兩者的基礎(chǔ)體系結(jié)構(gòu)的差別進(jìn)行簡單比較,并簡要介紹一下OOP開發(fā)模型,然后比較兩者的功能,***將使用PHP和ASP.NET開發(fā)Web應(yīng)用程序時(shí)的語法和常見任務(wù)作以對(duì)比。
注意:如果您希望跳過有關(guān)遷移的詳細(xì)信息,而只想嘗試ASP.NET的使用,則可以直接跳到建議的后續(xù)操作部分。
PHP ASP.NET體系結(jié)構(gòu)對(duì)比
閱讀完本文后,通過比較語法和語言,您將了解PHP和ASP.NET是很相似的,它們具有類似的功能和語法。但是,從更基本的體系結(jié)構(gòu)層面來講,PHP與ASP.NET卻有著很大差別。PHP基于獨(dú)立于平臺(tái)的處理器/引擎,該處理器/引擎用于分析PHP腳本、提供數(shù)據(jù)庫連接、符合Internet協(xié)議以及提供大多數(shù)Web應(yīng)用程序平臺(tái)所常見的眾多其他任務(wù)。
ASP.NET是基于一系列技術(shù)(如CLR)構(gòu)建的框架,提供了大量以很好的方式組織的類庫,這些類庫可滿足要在Web應(yīng)用程序中使用的大多數(shù)功能的需要。您還可以輕松地創(chuàng)建各種組件,對(duì)該框架進(jìn)行擴(kuò)展。
雖然PHP也提供了類似的功能(例如PEAR庫),但PHP和ASP.NET并非完全相同,因?yàn)锳SP.NET框架是完全基于OOP模式和OOP概念構(gòu)建的,而PHP則不然。這種差別在PHP和ASP.NET中類和對(duì)象的訪問方式方面表現(xiàn)得猶為明顯。
PHP ASP.NET中的面向?qū)ο缶幊?
雖然PHP和ASP.NET都為應(yīng)用程序開發(fā)提供了OOP模式,但它們對(duì)各種OOP概念(例如封裝和多態(tài))的支持卻存在差別。例如,PHP僅支持部分封裝(例如,支持在類中聲明方法和字段)和部分多態(tài)(沒有重載和抽象)。此外,由于PHP的類中不存在私有(private)、公有(public)或受保護(hù)(protected )函數(shù)等概念以及重載,因此PHP也不支持這些概念及其訪問。OOP純粹主義者可能會(huì)說,ASP.NET以及各種語言也沒有完全支持OOP模式中的所有概念,對(duì)于使用OOP的大多數(shù)語言(如C++和Java)來說,情況確實(shí)如此。
這既有積極的一面,也有消極的一面。消極的一面是:對(duì)于某些Web開發(fā)人員來說,學(xué)習(xí)ASP.NET要比學(xué)習(xí)PHP困難些,因?yàn)镻HP提供的是開發(fā)人員創(chuàng)建Web站點(diǎn)時(shí)所慣用的腳本模式。但是,使用過OOP語言和/或V的開發(fā)人員會(huì)發(fā)現(xiàn)ASP.NET比較親切且易于學(xué)習(xí)。
ASP.NET支持OOP概念的積極的一面是,ASP.NET應(yīng)用程序的大多數(shù)部分都會(huì)得到很好的設(shè)計(jì),并且能夠?qū)?nèi)容、邏輯和數(shù)據(jù)進(jìn)行清楚的分隔,因而從應(yīng)用程序生命周期的長遠(yuǎn)角度看,這通常更容易為其提供支持。此外,由于ASP.NET本身支持企業(yè)技術(shù),例如消息隊(duì)列、事務(wù)(請(qǐng)參閱.NET Framework的System.EnterpriseServices類)SNMP和Web服務(wù),因而可以很容易地開發(fā)具有高度可縮放性的強(qiáng)大的應(yīng)用程序。
要大致了解面向?qū)ο缶幊蹋◤腣isual Basic的角度)的主要概念,請(qǐng)參閱Object-Oriented Programming in Visual Basic。
PHP ASP.NET編譯
PHP
請(qǐng)求PHP頁面時(shí),HTML和內(nèi)聯(lián)PHP腳本將編譯為Zend Opcode(Zend操作代碼)。Opcode是低級(jí)的二進(jìn)制指令,是提供PHP頁面時(shí)實(shí)際使用的代碼。編譯后,Zend引擎將運(yùn)行Opcode(與Java的運(yùn)行時(shí)引擎運(yùn)行字節(jié)碼類似),然后生成HTML并提供給客戶端。
有許多商業(yè)產(chǎn)品可用來通過優(yōu)化這些Opcode來加快PHP頁面的執(zhí)行速度。其他提高PHP腳本性能的方法還包括對(duì)Opcode和生成的HTML進(jìn)行緩存。
ASP.NET
當(dāng)向IIS(Internet信息服務(wù))或其他Web服務(wù)器請(qǐng)求.aspx頁面(或ASP.NET支持的任何其他擴(kuò)展名)時(shí),該請(qǐng)求將被傳遞到ASP.NET進(jìn)行處理。如果是***次請(qǐng)求該頁面,ASP.NET會(huì)將其編譯為MSIL(Microsoft中間語言)。然后,CLR(公共語言運(yùn)行庫)會(huì)將此MSIL代碼轉(zhuǎn)換為機(jī)器碼。***使用這個(gè)編譯后的代碼運(yùn)行該請(qǐng)求。后續(xù)的請(qǐng)求將使用相同的機(jī)器碼運(yùn)行(假設(shè)該頁面未被修改)。
需要注意的是,因?yàn)橛蒀LR生成的二進(jìn)制代碼已經(jīng)***限度地進(jìn)行了優(yōu)化,所以不必再使用其他產(chǎn)品來幫助提高性能。
此外還要注意,ASP.NET中的所有內(nèi)容在運(yùn)行前都被編譯為機(jī)器碼。甚至HTML文本也被轉(zhuǎn)換為字符串常值控件,并按照適當(dāng)?shù)捻樞虿迦氲娇丶渲小?
PHP ASP.NET功能對(duì)比
下圖對(duì)PHP和ASP.NET中的某些主要功能進(jìn)行了比較。
PHP和ASP.NET的功能對(duì)比
PHP ASP.NET之間的較量就向你介紹到這里,關(guān)于PHP ASP.NET之間的比較,可以在使用過程中對(duì)他們?cè)俅握J(rèn)識(shí)。
【編輯推薦】