白刃之战:PHP vs. ASP.NET(节选)-架构比较
时间:2006-03-29 来源:EricssonXiao
作者: KBUG(翻译)
www.ASPCool.com
时间:2003-9-8 13:28:13 阅读次数
:4516
作者:Robert Lair and Jason Lefebvr Intensity Software, Inc.
翻译:EasyChen Exlcsoft.com
概观
开发界正在进行的一个争论是PHP和ASP中哪一个平台更适合网站开发。这场争
论由于微软的ASP.net带来的巨大变化而进入了新时期。和ASP 3.0比起来,ASP.NET采
用了全新的设计,有着很多新的特性和优点。究竟ASP.NET 会给PHP和ASP之间的争论带
来什么样的影响呢?本文将为你提供这个问题的答案的相关信息。
架构比较
PHP
PHP4.0以Zend Technologies的开源引擎Zend Engine为核心。当用户浏览器向
一个由PHP实现的网络服务器发出请求时,这个请求被传给Zend Engine,它将对php脚
本进行编译。如果编译顺利, 编译后的代码将被传递给生成发送给客户端的最终HTML
代码的Zend Engine Executor。从开发者角度看,PHP 4.0的框架既有优点也有缺点。
因为PHP是开源的,所以它得到了很多不同平台和web服务器的支持。虽然比以
前的PHP引擎大,Zend Engine仍然是轻便和强壮的。作为扩展,PHP也支持面向对象,
允许用户建立自己的类和对象。但是,由于某些原因,PHP不是真正的面向对象开发环
境。最好的一个例子是类成员函数和属性的作用域。在PHP中,一个类中的所有变量可
以从外部读写,这使得类的实现无法隐藏。
另外,PHP不是强类型语言(就是说,如果你比较字符4和整数4,结果是相同
的),这在架构大型程式时带来问题,也使得程式的调试变得困难。使得调试更为困难
的是,你甚至不需要声明变量,这和关掉explicit 选项的ASP很像。如果PHP在脚本中
遇到新的变量,它只会静静的创建它。
虽然被认为是宽松的PHP框架的灵活性,不过大概每个开发者在一些情况下都
会花数小时去解决由这个特性导致的BUG。对象在PHP中是语言级变量。它们在很大程度
上被当作简单变量类型处理。(就像整型和字符型变量一样)当进行像变量赋值和将对
象作为参数传递给函数的操作时,整个对象被复制。这将导致低效。另外,不可预知的
运行时行为会经常发生。
PHP缺少一些其它绝大多少现代开发框架拥有的关键元素。其中最重要的一个
是结构化异常捕捉。虽然可以给进程错误注册一个error handler,对于语言本身来说
并不方便。由于"try . . . catch"错误捕捉的缺席,很多PHP开发者完全忘记了错误捕
捉或者在很窄的范围中使用。
ASP.NET
ASP.NET的核心是Microsoft .NET框架。这个框架提供了common language
runtime (CLR)和类库,ASP.NET就建立在这之上。
当ASP.NET资源第一次被请求时,高层语言代码(像Microsoft Visual Basic?
.NET 或者C#)被编译成Microsoft Intermediate Language (MSIL) code。这个代码将
由CLR运行以产生用于网页服务的机器代码。
ASP.NET强制开发者使用真正的面向对象方式进行程式设计。所有的对象都是
真实的OO对象,支持如继承、多态(方法的重载)和封装的特性。
另外,ASP.NET中的所有语言都是强类型的。举个例子,要比较整数4和字符
4,你需要先将变量转换为整型,反之亦然。
ASP.NET采用事件驱动编程模型,这意味着,代码片断由在程式运行时可能发
生的事件联系起来。
举例而言,在ASP.NET 页面中的Page_Load()事件放置当浏览器读取Web form
时将要运行的代码。有很多附加事件和ASP.NET Page object相联系,开发者可以在它
们生命周期中的任何时间执行代码。同样的,一个Web form上的各个控件都有一系列可
在触发时可执行代码的事件。比如,通过在一个Web form添加一个button,你可以添加
一个方法(被叫做一个delegate)来在用户点击button时执行。几乎所有控件都有一个
或者多个事件。
你可以访问Microsoft在QuickStart指南中提供的关于Class Browser的例子,
可以在
http://samples.gotdotnet.com/quickstart/aspplus/samples/classbrowser/...
sbrowser.aspx在线运行它。
Easy注:这篇文章译自MSDN,是 白刃之战:PHP vs. ASP.NET 的一部分。文
章的其他部分Easy将视事件和精力选译部分。
相关阅读 更多 +