PHP和ASP NET都可以构建复杂的Web应用程序(例如电子商务站点 Intranet和企业门户) 但两者之间却存在若干重要差别 与PHP不同 ASP NET并不是一种语言或分析器 而是Microsoft NET Framework中的一组用于构建Web应用程序和XML Web Service的技术 同PHP一样 Microsoft ASP NET页面在服务器上执行并生成标记(例如HTML WML或XML) 标记将发送给桌面应用程序或移动应用程序 但不同的是 ASP NET为开发Web页面提供了强大的 面向对象的以及由事件驱动的编程模型 同时仍保留了PHP开发人员所习惯的那种简单性
PHP与ASP NET比 ASP NET应用程序是基于强大的面向对象编程(OOP)模式 而不是基于脚本模式 这样便可以获得更为严谨的OOP功能 例如继承 封装和反射 虽然大多数基本的简单操作可以轻松地从PHP转换到ASP NET 但要转换更为复杂的应用程序却并不这么简单 这需要仔细的规划和考虑 并采用更符合OOP的方法
本文假设读者具有PHP方面的经验 并且对编程和软件开发有着基本了解 本文首先从代码方面对两者的基础体系结构的差别进行简单比较 并简要介绍一下OOP开发模型 然后比较两者的功能 最后将使用PHP和ASP NET开发Web应用程序时的语法和常见任务作以对比
注意 如果您希望跳过有关迁移的详细信息 而只想尝试ASP NET的使用 则可以直接跳到建议的后续操作部分
PHP ASP NET体系结构对比
阅读完本文后 通过比较语法和语言 您将了解PHP和ASP NET是很相似的 它们具有类似的功能和语法 但是 从更基本的体系结构层面来讲 PHP与ASP NET却有着很大差别 PHP基于独立于平台的处理器/引擎 该处理器/引擎用于分析PHP脚本 提供数据库连接 符合Internet协议以及提供大多数Web应用程序平台所常见的众多其他任务
ASP NET是基于一系列技术(如CLR)构建的框架 提供了大量以很好的方式组织的类库 这些类库可满足要在Web应用程序中使用的大多数功能的需要 您还可以轻松地创建各种组件 对该框架进行扩展
虽然PHP也提供了类似的功能(例如PEAR库) 但PHP和ASP NET并非完全相同 因为ASP NET框架是完全基于OOP模式和OOP概念构建的 而PHP则不然 这种差别在PHP和ASP NET中类和对象的访问方式方面表现得犹为明显
PHP ASP NET中的面向对象编程
虽然PHP和ASP NET都为应用程序开发提供了OOP模式 但它们对各种OOP概念(例如封装和多态)的支持却存在差别 例如 PHP仅支持部分封装(例如 支持在类中声明方法和字段)和部分多态(没有重载和抽象) 此外 由于PHP的类中不存在私有(private) 公有(public)或受保护(protected )函数等概念以及重载 因此PHP也不支持这些概念及其访问 OOP纯粹主义者可能会说 ASP NET以及各种语言也没有完全支持OOP模式中的所有概念 对于使用OOP的大多数语言(如C++和Java)来说 情况确实如此
这既有积极的一面 也有消极的一面 消极的一面是 对于某些Web开发人员来说 学习ASP NET要比学习PHP困难些 因为PHP提供的是开发人员创建Web站点时所惯用的脚本模式 但是 使用过OOP语言和/或V的开发人员会发现ASP NET比较亲切且易于学习
ASP NET支持OOP概念的积极的一面是 ASP NET应用程序的大多数部分都会得到很好的设计 并且能够对内容 逻辑和数据进行清楚的分隔 因而从应用程序生命周期的长远角度看 这通常更容易为其提供支持 此外 由于ASP NET本身支持企业技术 例如消息队列 事务(请参阅 NET Framework的System EnterpriseServices类)SNMP和Web服务 因而可以很容易地开发具有高度可缩放性的强大的应用程序
要大致了解面向对象编程(从Visual Basic的角度)的主要概念 请参阅Object Oriented Programming in Visual Basic
PHP ASP NET编译
PHP
请求PHP页面时 HTML和内联PHP脚本将编译为Zend Opcode(Zend操作代码) Opcode是低级的二进制指令 是提供PHP页面时实际使用的代码 编译后 Zend引擎将运行Opcode(与Java的运行时引擎运行字节码类似) 然后生成HTML并提供给客户端
有许多商业产品可用来通过优化这些Opcode来加快PHP页面的执行速度 其他提高PHP脚本性能的方法还包括对Opcode和生成的HTML进行缓存
ASP NET
当向IIS(Internet信息服务)或其他Web服务器请求 aspx页面(或ASP NET支持的任何其他扩展名)时 该请求将被传递到ASP NET进行处理 如果是第一次请求该页面 ASP NET会将其编译为MSIL(Microsoft中间语言) 然后 CLR(公共语言运行库)会将此MSIL代码转换为机器码 最后使用这个编译后的代码运行该请求 后续的请求将使用相同的机器码运行(假设该页面未被修改)
需要注意的是 因为由CLR生成的二进制代码已经最大限度地进行了优化 所以不必再使用其他产品来帮助提高性能
此外还要注意 ASP NET中的所有内容在运行前都被编译为机器码 甚至HTML文本也被转换为字符串常值控件 并按照适当的顺序插入到控件树中
PHP ASP NET功能对比
C#调用PHP写的WebService1.server.php
<?php
class Result{
function add($a,$b){
return $a+$b
}
}
?>
2.kobetest.wsdl
<?xml version='1.0' encoding='UTF-8'?>
<!-- WSDL file generated by Zend Studio. -->
<definitions name="kobetest" targetNamespace="urn:kobetest" xmlns:typens="urn:kobetest" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
<message name="add">
<part name="a" type="xsd:string"/>
<part name="b" type="xsd:string"/>
</message>
<message name="addResponse">
<part name="addReturn" type="xsd:string"/>
</message>
<portType name="ResultPortType">
<operation name="add">
<input message="typens:add"/>
<output message="typens:addResponse"/>
</operation>
</portType>
<binding name="ResultBinding" type="typens:ResultPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="add">
<soap:operation soapAction="urn:ResultAction"/>
<input>
<soap:body namespace="urn:kobetest" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body namespace="urn:kobetest" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="kobetestService">
<port name="ResultPort" binding="typens:ResultBinding">
<soap:address location="http://192.168.1.55/server.php"/>
</port>
</service>
</definitions>
3.在VS2005中“添加web引用”,然后在代码里调用webservice就OK了。
ASP.NET框架功能十分强大,使用的语言C#也是十分规范的面向对象语言,在Visual Studio 2010下面用ASP.NET来开发简直是种享受。PHP相比起来缺点不少,设计初期没有充分地考虑面向对象特性,使得后面加入的面向对象语法十分别扭。很多函数的命名,参数顺序都没有规律可循,这点跟.Net比起来时蛮难受的。估计最多人受不了PHP的地方是使用变量时,变量名前面一定要加个$符号。
虽然如此但毫无疑问在世界范围内PHP是应用最多的网站服务端编程语言。原因就几点,开发速度快,而且使用PHP技术不用付授权费,因为有LAMP黄金搭档。ASP.Net有很多强大的功能,但实际上我们常用的只是很少的一部分。如果只是从数据库读些数据然后显示在客户端上面的话用PHP是绰绰有余的,而其实这也是开发动态网站的时候做得最多的事情。事实上相对于.Net,PHP也有很多强大的第三方扩展和框架,例如memcache、smarty、thinkPHP等等。
所以PHP这门被很多人认为语法丑陋的语言能活跃到今天不是没有道理的。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)