白刃之战:PHPvs.ASP.NET(节选)-架构比较
2023-06-13 09:13:42 时间
作者:RobertLairandJasonLefebvrIntensitySoftware,Inc.
翻译:EasyChenExlcsoft.com
概观
开发界正在进行的一个争论是PHP和ASP中哪一个平台更适合网站开发。这场争论由于微软的ASP.net带来的巨大变化而进入了新时期。和ASP3.0比起来,ASP.NET采用了全新的设计,有着很多新的特性和优点。究竟ASP.NET会给PHP和ASP之间的争论带来什么样的影响呢?本文将为你提供这个问题的答案的相关信息。
架构比较
PHP
PHP4.0以ZendTechnologies的开源引擎ZendEngine为核心。当用户浏览器向一个由PHP实现的网络服务器发出请求时,这个请求被传给ZendEngine,它将对php脚本进行编译。如果编译顺利,编译后的代码将被传递给生成发送给客户端的最终HTML代码的ZendEngineExecutor。从开发者角度看,PHP4.0的框架既有优点也有缺点。
因为PHP是开源的,所以它得到了很多不同平台和web服务器的支持。虽然比以前的PHP引擎大,ZendEngine仍然是轻便和强壮的。作为扩展,PHP也支持面向对象,允许用户建立自己的类和对象。但是,由于某些原因,PHP不是真正的面向对象开发环境。最好的一个例子是类成员函数和属性的作用域。在PHP中,一个类中的所有变量可以从外部读写,这使得类的实现无法隐藏。
另外,PHP不是强类型语言(就是说,如果你比较字符4和整数4,结果是相同的),这在架构大型程式时带来问题,也使得程式的调试变得困难。使得调试更为困难的是,你甚至不需要声明变量,这和关掉explicit选项的ASP很像。如果PHP在脚本中遇到新的变量,它只会静静的创建它。
虽然被认为是宽松的PHP框架的灵活性,不过大概每个开发者在一些情况下都会花数小时去解决由这个特性导致的BUG。对象在PHP中是语言级变量。它们在很大程度上被当作简单变量类型处理。(就像整型和字符型变量一样)当进行像变量赋值和将对象作为参数传递给函数的操作时,整个对象被复制。这将导致低效。另外,不可预知的运行时行为会经常发生。
PHP缺少一些其它绝大多少现代开发框架拥有的关键元素。其中最重要的一个是结构化异常捕捉。虽然可以给进程错误注册一个errorhandler,对于语言本身来说并不方便。由于"try...catch"错误捕捉的缺席,很多PHP开发者完全忘记了错误捕捉或者在很窄的范围中使用。
ASP.NET
ASP.NET的核心是Microsoft.NET框架。这个框架提供了commonlanguageruntime(CLR)和类库,ASP.NET就建立在这之上。
当ASP.NET资源第一次被请求时,高层语言代码(像MicrosoftVisualBasic®.NET或者C#)被编译成MicrosoftIntermediateLanguage(MSIL)code。这个代码将由CLR运行以产生用于网页服务的机器代码。
ASP.NET强制开发者使用真正的面向对象方式进行程式设计。所有的对象都是真实的OO对象,支持如继承、多态(方法的重载)和封装的特性。
另外,ASP.NET中的所有语言都是强类型的。举个例子,要比较整数4和字符4,你需要先将变量转换为整型,反之亦然。
ASP.NET采用事件驱动编程模型,这意味着,代码片断由在程式运行时可能发生的事件联系起来。
举例而言,在ASP.NET页面中的Page_Load()事件放置当浏览器读取Webform时将要运行的代码。有很多附加事件和ASP.NETPageobject相联系,开发者可以在它们生命周期中的任何时间执行代码。同样的,一个Webform上的各个控件都有一系列可在触发时可执行代码的事件。比如,通过在一个Webform添加一个button,你可以添加一个方法(被叫做一个delegate)来在用户点击button时执行。几乎所有控件都有一个或者多个事件。
你可以访问Microsoft在QuickStart指南中提供的关于ClassBrowser的例子,可以在http://samples.gotdotnet.com/quickstart/aspplus/samples/classbrowser/vb/classbrowser.aspx在线运行它。
Easy注:这篇文章译自MSDN,是白刃之战:PHPvs.ASP.NET的一部分。文章的其他部分Easy将视事件和精力选译部分。
翻译:EasyChenExlcsoft.com
概观
开发界正在进行的一个争论是PHP和ASP中哪一个平台更适合网站开发。这场争论由于微软的ASP.net带来的巨大变化而进入了新时期。和ASP3.0比起来,ASP.NET采用了全新的设计,有着很多新的特性和优点。究竟ASP.NET会给PHP和ASP之间的争论带来什么样的影响呢?本文将为你提供这个问题的答案的相关信息。
架构比较
PHP
PHP4.0以ZendTechnologies的开源引擎ZendEngine为核心。当用户浏览器向一个由PHP实现的网络服务器发出请求时,这个请求被传给ZendEngine,它将对php脚本进行编译。如果编译顺利,编译后的代码将被传递给生成发送给客户端的最终HTML代码的ZendEngineExecutor。从开发者角度看,PHP4.0的框架既有优点也有缺点。
因为PHP是开源的,所以它得到了很多不同平台和web服务器的支持。虽然比以前的PHP引擎大,ZendEngine仍然是轻便和强壮的。作为扩展,PHP也支持面向对象,允许用户建立自己的类和对象。但是,由于某些原因,PHP不是真正的面向对象开发环境。最好的一个例子是类成员函数和属性的作用域。在PHP中,一个类中的所有变量可以从外部读写,这使得类的实现无法隐藏。
另外,PHP不是强类型语言(就是说,如果你比较字符4和整数4,结果是相同的),这在架构大型程式时带来问题,也使得程式的调试变得困难。使得调试更为困难的是,你甚至不需要声明变量,这和关掉explicit选项的ASP很像。如果PHP在脚本中遇到新的变量,它只会静静的创建它。
虽然被认为是宽松的PHP框架的灵活性,不过大概每个开发者在一些情况下都会花数小时去解决由这个特性导致的BUG。对象在PHP中是语言级变量。它们在很大程度上被当作简单变量类型处理。(就像整型和字符型变量一样)当进行像变量赋值和将对象作为参数传递给函数的操作时,整个对象被复制。这将导致低效。另外,不可预知的运行时行为会经常发生。
PHP缺少一些其它绝大多少现代开发框架拥有的关键元素。其中最重要的一个是结构化异常捕捉。虽然可以给进程错误注册一个errorhandler,对于语言本身来说并不方便。由于"try...catch"错误捕捉的缺席,很多PHP开发者完全忘记了错误捕捉或者在很窄的范围中使用。
ASP.NET
ASP.NET的核心是Microsoft.NET框架。这个框架提供了commonlanguageruntime(CLR)和类库,ASP.NET就建立在这之上。
当ASP.NET资源第一次被请求时,高层语言代码(像MicrosoftVisualBasic®.NET或者C#)被编译成MicrosoftIntermediateLanguage(MSIL)code。这个代码将由CLR运行以产生用于网页服务的机器代码。
ASP.NET强制开发者使用真正的面向对象方式进行程式设计。所有的对象都是真实的OO对象,支持如继承、多态(方法的重载)和封装的特性。
另外,ASP.NET中的所有语言都是强类型的。举个例子,要比较整数4和字符4,你需要先将变量转换为整型,反之亦然。
ASP.NET采用事件驱动编程模型,这意味着,代码片断由在程式运行时可能发生的事件联系起来。
举例而言,在ASP.NET页面中的Page_Load()事件放置当浏览器读取Webform时将要运行的代码。有很多附加事件和ASP.NETPageobject相联系,开发者可以在它们生命周期中的任何时间执行代码。同样的,一个Webform上的各个控件都有一系列可在触发时可执行代码的事件。比如,通过在一个Webform添加一个button,你可以添加一个方法(被叫做一个delegate)来在用户点击button时执行。几乎所有控件都有一个或者多个事件。
你可以访问Microsoft在QuickStart指南中提供的关于ClassBrowser的例子,可以在http://samples.gotdotnet.com/quickstart/aspplus/samples/classbrowser/vb/classbrowser.aspx在线运行它。
Easy注:这篇文章译自MSDN,是白刃之战:PHPvs.ASP.NET的一部分。文章的其他部分Easy将视事件和精力选译部分。
相关文章
- .Net Core3.1 SignalR for WPF Asp.net
- 快速入门 .NET nanoFramework 开发 ESP32-Pico 应用
- 【愚公系列】2023年01月 .NET CORE工具案例-使用pythonnet实现C#和Python的融合调用
- .net让Oracle与ASP.NET实现无缝连接(oracleasp)
- Oracle NET突破技术界限,精彩开启新纪元(oracle net??)
- ASP连接MySQL登录动态网站实战(asp 登录 mysql)
- Net平台下MySQL数据库操作实践(.net mysql操作)
- ASP.NET技巧:请求网址并解析返回的html
- asp.net下用url重写URLReWriter实现任意二级域名的方法
- asp.net下获取远程网页的内容之二(downmoon原创)
- asp.net下使用DIME协议上传文件
- Asp.net时间操作基类(支持短日期,长日期,时间差)
- asp.net站点URLRewrite使用小记
- ASP.NET定制简单的错误处理页面实现代码
- asp.net分页链接方法
- asp.net下用Aspose.Wordsfor.NET动态生成word文档中的数据表格的方法
- asp.net下使用DbProviderFactories的数据库操作类
- 关于有些Asp.net项目发布后出现网址乱码的解决方法
- Asp.net在三层架构中事务的使用实例代码
- Asp.net实现选择性的保留DataTable中的列
- asp.net实现上传文件显示本地绝对路径的实例代码
- asp.net错误处理Application_Error事件示例
- Asp.Net(C#)自动执行计划任务的程序实例分析分享
- asp.net后台注册js的四种方法分享