我都一时无法回答,以前建站时都使用asp.net,编辑器是Dreamweaver cs6,当然也可以在visual studio集成开发环境下,或者webmatrix。也曾学过Python的django,ruby on rails,javaweb,后来听说PHP,又学习PHP语言建站,用过WordPress,joomla等cms建站,这些cms都是php语言开发的。
一, PHP和ASP.NET最大最本质的区别,就是PHP只是一门编程语言,而ASP.NET是一个平台。
看世界上大约1/3的网站的应用程序是用PHP写的,这些PHP程序又大部分运行在Apache上,作为一门语言,PHP并不是必须运行在Apache上,PHP是独立于运行平台的,它也可以在IIS里运行。与PHP相反,ASP.NET是一个平台而不是语言,ASP.NET的程序可以用C#写,也可以用VB.NET写,也可以是别的编程语言,可以用任何能够编译成在.NET CLR上运行的的编程语言来写,ASP.NET通常运行在Windows+IIS上,但是也可以运行在其他Web Server比如Apache上。
从这个意义上说,PHP和ASP.NET的区别,就好比是iPhone和Windows 7的区别,不是一样的东西,但是你选择了其中一个,就等于选择一种风格。
但是作为开发网络应用的工具,就我的体会,在功能上还有两个显著区别。
二,Share-Nothing Architecture
PHP的哲学是Share-Nothing Architecture,每次对HTTP请求的处理都是独立的,不共享任何数据,如果真的需要共享的话,那也是通过文件系统或者数据库,在PHP的运行空间中不会共享内存对象。这篇关于Share-Nothing Architecture的文章非常详细地介绍了Share-Nothing Architecture,这种架构能够带来更好的扩展性(Scalability)和可维护性(Maintainablity)。
使用ASP.NET一样可以实现Share-Nothing Architecture,问题是,ASP.NET一族的编程语言特性让打破Share-Nothing Architecture太容易了。比如,C#语言中的static变量,如果使用的话,同一AppDomain的每个HTTP请求都Share同一数据,这样就不是Share-Nothing了。
Asynchronous Programming Model
ASP.NET有一个功能是PHP不具有的,Asynchronous Programming Model(APM),异步编程模型,这一模型可以更有效地利用线程,提高Scalaibility,当然,写异步的程序要比写同步的程序困难得多。
PHP没有ASP.NET一样的Asynchronous Programming Model,为什么在这一方面PHP世界居然逊于微软技术呢?
我看可从两方面回答,第一,微软支持APM是因为它能够支持,第二,是因为微软必须支持。
为了支持APM,必须要有底层支持,ASP.NET作为一个平台,可以利用微软的IO Completion Port来实现真正的异步。但是像PHP这样的编程语言,只是编程语言,不能够假设自己运行在一个支持异步端口的平台上,所以决定语言不会添加APM功能。
为什么又说微软必须支持APM呢?Windows上进程的代价很大,线程的代价好一点,但是依然很大,所以要有效地使用线程,就必须创造出APM这样的东西。相比之下,Linux上进程线程的代价要小得多,这样创造APM的压力也就小得多,不用APM一样可以保持高效。
Trends
这篇文章标题是”PHP vs ASP.NET”,我们用Google Trends来看看二者的比较。看短期对PHP和ASP.NET的关注程度,企业更关注PHP。
三,资金问题,企业更青睐PHP,毕竟PHP是大众化,“平民英雄”,PHP建站有很多是免费的,不像,asp.net,javaweb建站,有多数是收费的,当然从安全角度考虑,PHP建站漏洞多,容易被黑客攻破,一般银行网站都使用ASP.net,或者Java语言开发的jsp,使用PHP建站少。
四,支持PHP语言开发的编辑器与IDE有很多,如sublime,PHPdesigner,phpedit,zenstudio,等相反支持asp.net的很少。
且PHP是跨平台的即Linux与Windows系统,asp.net只限于Windows。
OK,end