PHP7发布在即,让我们再次读到这片2007年的老文章时,会有很多感慨。对比目前的技术发展状况,能让PHPer体会最深的是:时代在发展,技术在发展,PHP也在发展,从来没有掉队过!
本文由黄柏谚于2007年1月15日,发表于IThome(中国台湾),原文网址为:http://www.ithome.com.tw/node/41491。
PHP不仅使用人口多,应用在大型网站和新颖的网路应用也屡见不鲜;除了作为炫人耳目的Web 2.0网站之用,事实上PHP也有许多企业应用程式的解决方案。 我们将全面解析PHP,并分析它在发展过程中的**与隐忧。
造就PHP的关键
PHP这个发展超过10年,拥有最多使用人口的网页程式语言,一向以简单、快速知名,也因此在Web 2.0卷起千堆雪的风潮中,不曾缺席,无论是影音网站、部落格、电子商务、Wiki系统等,通通有PHP的身影。 我们甚至可以说,PHP其实是这波Web 2.0的骨干之一,尽管它不如Ajax那么容易被炫目,也不像Ruby on Rails充满明星身段,或像.NET或Java那么深受企业信赖,然而它还是依然保有网页程式霸主的地位,并且保有生猛活力,中原因,值得深入探索。
为了寻求PHP的活力根源,我们走访几位长期使用PHP开发人员,他们除了应用在工作之上,也积极参与PHP开发原始码专案或社群,这些第一线的PHP战士,为我们解析了PHP致胜的原因,也点明它在发展上的困境。另外,面对在网页开发领域中犹如投下一记深水炸弹的Ruby on Rails,PHP如何与之因应与对话,也是一个观察重点。
不少人对PHP是否足堪企业应用存疑,然而电子商务网站Zakka杂货网却从ASP投向PHP,并在PHP加持之下解决过去系统不稳定的情况,更强化网站架构的弹性、效能与营运品质,我们将仔细剖析这个案例,以进一步了解PHP的特质。
易学、弹性和开放原始码社群,造就PHP生命力
容易上手是PHP之所以能广为盛行的原因之一。 PHP是基于C语言之上的直译式语言,可读性比过去常被用来当作CGI语言的Perl高,宽松的变数型态和宣告,也让它在使用上相当方便,另外广大的函式库也让开发人员可以减轻不少工作。 基于以上的数种特性,许多PHP开发人员根本不需要IDE工具辅助,只需要一个文字处理软体,像是Windows当中的记事本或UltraEdit,就可以进行开发,从另一个层面来说,降低了开发人员或企业的软体成本。
参与知名文件管理系统Drupal社群的黄隽,便是使用Notepad 进行PHP的开发,在他眼中,PHP除了学习容易之外,最大的好处在于实作的架构可大可小,如果只是要设计一个Web的发信介面,透过PHP可能10几行程式码就可以解决。 如果需要更为庞大的架构,PHP也可以透过物件导向的开发方式,严谨实作出漂亮的架构。
关于这一点,长期参与Lifetype开发团队的吴信仪体验最深。 Lifetype前身为plog,虽然一开始便采用物件导向架构,不过早期规画时并没有针对多人的使用环境最佳化。 后来**的博客中国网站采用plog作为他们的平台,当人数增加到5000人左右,系统就难以负荷。
在了解博客中国的瓶颈之后,Lifetype开发团队针对快取、资料库查询、索引,以及整体架构调整,整体的效能便有明显提升,以目前博客中国透过Proxy辅助,利用一台Web Server和分散的资料库系统架构,可以支撑到10万个会员。 吴信仪认为,应用程式架构只要设计得当,加上良好的系统配置,PHP用来开发大型网站并没有问题。 无论是采用物件导向观念实作的Lifetype,或是仍维持传统PHP方式开发的Drupal,一样都建立起颇受好评的应用程式,这也是PHP可大可小、架构弹性的证明。
吴信仪认为PHP另一个关键的好处在于它是开放原始码,因此程式设计师能使用的资源相当多,几乎需要任何系统都能在PHP社群中找到解决方案。 从CRM、专案管理系统等种种企业应用程式,或最近热门的MVC网站开发架构,只要有需求,PHP通常在极短的时间内就可以产生软体或框架。 例如Ruby on Rails受到广泛重视之后,PHP很快就采其神髓,释出像CakePHP、Symfony等Rails-like的MVC架构;如果有客制化的需求,只要程式设计师的PHP功力足够,将架构整个翻新也都没有任何问题。 像是最近崛起的部落格平台Pixnet,就是将原本Lifetype架构大改写,几乎只留下资料库结构和CSS。
另一个CMS平台Joomla中文专案负责人张至宁,则认为PHP的平民性格是它能广受欢迎的原因。 PHP不需要专用的开发工具,在便宜的虚拟主机上就可以运行,而且几乎所有的虚拟主机代管厂商都支援;加上PHP学习门槛低,使用者很快就可以进入开发工作。 张至宁开玩笑地说:「PHP看起也许脏脏丑丑的,不上相也不起眼,但要派上用场时,是不会输给那些贵族网页程式开发语言」。
PHP的发展史 |
|
PHP的发展源头是从1994年开始,当时Rasmus Lerdorf在C语言的基础上开发出一套CGI程式,称之为「Personal Home Page Tools」这便是PHP的滥觞。 之后Zeev Suraski和Andi Gutmaus在1997年改写PHP,并在隔年推出PHP3。2000年之后PHP的Zend引擎和PHP 4发布,从此PHP迈向一个新的境界,使用者大增。
在2004年PHP 5发布,在架构上朝物件导向发展,对MySQL资料库的支援也更为完整。 另外像是提升XML运用、整合SOAP支援、提供例外处理和全新的资料库存取介面PDO(PHP Data Objects)等,都是PHP 5所加强之处。
但是PHP 4却不因为新版本推出而退出舞台,事实上停留在PHP 4的应用仍然不少,主要是PHP4的执行速度要比PHP 5快,此外,对于物件导向架构的接受度,也是两代之间的交战点,拥护PHP 4的人多半认为物件导向的写法破坏原有PHP轻巧易用的特性。 最新版本PHP 6仍在开发阶段,已知有支援Unicode、注册全域变数等。
PHP除了作为网站开发语言之外,同时也能在命令列环境中使用,此外,也可以用来开发Winodws中的视窗应用程式,不过一般而言,网站开发还是PHP最精擅与适合的领域。
|
Ruby on Rails登场,冲击PHP发展
PHP拥有许多傲人优势,但是Ruby on Rails的出现,仍为PHP社群带来极大的冲击。
Ruby on Rails是利用物件导向语言Ruby设计的网页开发框架,开发者David Heinemeier Hansson在专案开发过程中设计出Ruby on Rails,并在2005年12月释出第一版公开版本,旋即造成一股RoR热潮。 RoR具备轻巧、漂亮的MVC架构和简化设定、降低重复工作的原则,使得开发人员可以在极短的时间内完成网站开发,而有「网站开发快10倍」的称号;MVC架构与约定性网站配置和命名原则,也使日后维护工作容易进行。
RoR的出现,不但使得过去深为繁复设定工作所苦的Java网站开发人员,眼睛为之一亮,更让过去以轻巧见长的PHP相形失色。
RoR的冲击,并非全然因开发框架而起,事实上PHP过去也不乏开发框架,只是情况是「一人一把号,各吹各的调」,有些框架专注在解决部分的问题,有些则是只能应用在特定的系统。
以PHP社群中相当知名的样板引擎Smarty为例,它可以用来分隔PHP程式和样面外观,解决过去PHP和HTML混用的问题,改善了过缺乏结构的情况。 另外Smarty会编译样板和PHP,输出成HTML档,在样板没有变动的情况之下,会加快网页读取速度。 许多PHP专案都导入Smarty,以增加开发速度与维护性,不过Smarty架构必须牺牲部分的效能,加上在MVC架构中它仅占View的部分,对于大型网站所需仍嫌不足。
此外,PHP社群充满各式各样的应用程式专案,每个专案中可能就有自己独特的开发框架。 以Lifetype为例,大约在二、三年前就已经采行框架的方式进行开发,一样是MVC架构,一样是物件导向,然而即使架构抽象化成为一套普遍性的网站开发架构,移植到其他专案却也未必适用。 像哇宝国际资讯技术经理李辰德在开发Zakka时也有一套开发框架,虽然不是完整的MVC架构,但针对电子商务网站开发却能带来极高的产能,但如果想移植成部落格平台的开发框架,就有其难度。
如果拿PHP和Ruby相比,虽然Ruby的物件导向架构极为漂亮,但是效能远不如PHP,因此PHP在先天条件上远优于RoR。 另外,从网站的开发工作而言,PHP已经累积许多资源,例如网页伺服器的优化、程式的快取机制、与各种资料库的介接和优化、元件的使用等,这些都是PHP遥遥领先RoR之处,因此PHP应该比RoR更大有可为才是。
然而无可否认的是,Rails是一个相当进化的架构,提供许多自动化工具,简化程式开发人员的工作,让开发工作可以集中力气在程式和商务逻辑的部分。 因此PHP缺乏的是一个漂亮的架构,而吸纳别人的优点成为自己的优点,一直是PHP成长、进步的吸星**,RoR带来的冲击,也成了PHP进步的养份。
PHP新兴框架纷起,加速开发网页应用程式 PHP为了急起直追RoR的漂亮架构,纷纷推出许多所谓「Rails-like」的框架,比较知名的如Symfony、CakePHP甚至连名字都抄过来的PHP on Trax等。 这些新兴的框架,大多从MVC架构、Active Record的OR Mapping机制、scaffold自动生成程式码或是约定优于配置等原则来发展架构,让框架来处理烦人的设定工作,开发人员需要撰写的程式码也相对减少,日后的维护工作也更容易进行。
这些发展中的框架或许仍有不足之处,然而PHP社群能在短短时间开发出这么多的框架,展现PHP惊人的发展力。
除了Rails-like的框架,PHP仍有其他极富竞争力的开发框架,例如Zend推出的「Zend Framework」,集合许多有用元件、函式,发挥了PHP 5的优势,让开发人员可以不用重复做相同的工作。
种种新兴框架的发展,将使得PHP在网页应用程式的开发将更具生产力。
PHP协助企业及早进入Web based的时代
Ruby on Rails之所以能快速窜起的因素很多,但其中之一是Web based应用程式缺乏快速、有效的解决方案。尤其当大企业不断在思索如何导入SOA,而中、小企业观望SaaS能为它们带来什么样的效益时,Web应用程式时代已经来临。
由于PHP是为网页而生的语言,因此在Web 2.0的时代,它的伸展空间更大。 台湾的部落格平台如无名小站、Xuite都是以PHP打造,这些使用人数众多的平台,足以说明PHP发展出的应用程式平台,足以负荷高流量。
在应用程式设计上,PHP开发出的程式也越来越容易部署和使用。 以Lifetype而言,只要具备MySQL资料库,即可在Web介面安装,不但具备环境侦测功能,告知使用者是否足备足够的安装条件。 按照预设条件的安装方式,只要指定部落格的基本资料和管理者帐号与密码即可。 这种友善的安装方式基本上吸收了Windows「下一步」式的安装概念,现在的PHP应用程式专案,大多采用这种安装方式,以减轻使用者的负担。 因此导入PHP应用程式系统的门槛,已经不再是网路或PHP的IT技术,而是如何管理特定系统的专业知识,例如CRM系统需具备客户管理的知识,或是懂得利用商业智慧系统分析企业营运。
此外,高度互动性网页介面是大势所趋,PHP也能结合许多网路上的Ajax解决方案,让开发人员无需自己撰写即可完成Ajax应用,让网页的资讯更新加倍即时、灵活。 李辰德便透过xajax帮Zakka的购物车与后台管理系统Ajax化,使用者在更新购物车数量或管理人员上、下架产品时,都可在同一页面得到结果,使用者无需等待页面刷新,操作方式也更为直觉、方便。
PHP结合许多现成的元件与框架,能迅速开发出丰富互动效果的网站,提供使用者为简单易用使用者介面,这些技术往往纳入各式企业应用系统,让企业能在存取性高的网站上管理与生产。
企业对PHP尚缺乏信心
由于网站作为服务平台或者利用网站串接上、下游资讯的机会越来越普及,例如Zakka便透过Web Services的方式,让PChome Online的会员资讯可以在Zakka继续沿用,减少重新注册的手续。 另外像线上金流的处理、和银行ATM系统配合,精简对帐作业等等,透过PHP都能提供Zakka安全、快速、资讯互通的机制。
虽然李辰德采用PHP替Zakka建立系统架构,然而接专案时,有时也会因为客户本身的喜好而采用Java、.NET等。 李辰德分析,企业在采用语言时不免迷信名牌,有时候采用PHP却可达到相同的效果,而且开发时间可以缩短不少,然而客户还是觉得用两大平台较为心安。
吴信仪认为J2EE平台美则美矣,但是企业如真的需要用到这样的规模,还要考量能否承受得起它漫长的开发时间与成本,大概只有像台积电或宏公司这种规模的公司,拥有自己专属的开发团队,而且需要完整的支援与服务,才有必要用J2EE。
张至宁指出有些企业的网页开发专案,只是要替ERP系统新增网页介面。 其实透过PHP很快就能建立使用者介面,配合Ajax技术,PHP就能将过去桌面程式的使用经验,复制到网页上。
由于台湾企业的系统,微软平台占的比例相当高,因此直接采用.NET开发的比例相对会比较高,但PHP在微软平台上运行的效能不如在Linux上也是不争的事实,影响企业接受PHP的意愿。 不过微软已经和Zend合作,着手修改PHP在IIS上的效能问题,未来应该会有明显改善。 另外,像IBM或BEA的企业入口网站产品也都陆续支援PHP,肯定PHP的地位,让PHP更深入大型企业的领域。 因此企业对于PHP的适用性,多半只是信心问题,而非技术层面因素。
撇开信心、技术等因素,PHP发展至今,的确也有不利进入企业的隐忧,例如学习PHP的门槛低是优点,却也造成开发人员素质良莠不齐,程度落差大,企业要筛选到理想的人员要花费较多的力气。 虽然Zend目前已经推出PHP的认证,但是认识到这张证照价值的企业和开发人员尚属少数,台湾目前获取PHP认证只有三人,日后如能普及,至少方便企业在鉴职PHP人员时,具有基本的指标。
其次是服务支援的问题,这点对于企业在选择开发语言时,也是重要的参考点。 PHP的开发人员虽然可以透过网路寻求资源和协助,但这对企业而言不确定性太高,至少选用Java或.NET出问题时,他们可以向升阳或微软寻求解决之道。 Zend虽然也有提供服务,但究竟远在国外,远水救不了近火。
PHP提供企业更易迈入敏捷开发的能力
就技术论技术的话,PHP原本就是为网页开发而生,历经几代改版,物件导向语法越来越完整、清晰,尤其是PHP 6备受期待,将带来更为完整的架构。
物件导向是不是PHP该走的路一直存有争议,采用PHP 4仍大有人在,因为在未调校的情况下,它的效能就是比物件导向较完整的PHP 5好。 不过如果着眼在严谨的开发方式、稳定度与日后维护程式与再利用等考量,物件导向都是必走的路,也是一条通往企业的路。
此外,虽然PHP的框架不断推陈出新,但是在框架的交替兴亡之间,技术仍在演进。 PHP社群对RoR不尽全然认同,但也承认它的确是杀手级的框架,并开始学习含蕴在Rails架构下的智慧,无论日后RoR是否发展得更好或者终究是一时炒作,PHP已经为自己的社群累积更多的资源,以分享给其他开发人员和企业使用。
PHP诸多基于Web的应用程式,像是CRM、企业入口网站、专案管理、文件管理系统等,都有现成可用的解决方案可以提供给企业使用,更关键的是,在服务为导向的时代,企业如何因应快速变动的需求,以最短的期程敏捷开发所需的应用和服务,已经是这个时代不可或缺的竞争力。
PHP也许不是唯一的选择,但它从元件、框架、应用系统都相当齐备,加上开放原始码的优势,可客制化的程度高,对于企业跨入敏捷开发的新时代,将更为容易而稳健。
----------------伟大的分割线----------------
PHP饭米粒(phpfamily) 由一群靠谱的人建立,愿为PHPer带来一些值得细细品味的精神食粮!
本文由 PHP饭米粒(phpfamily) 转载自IThome(中国台湾),转载请注明原来源信息(请阅读原文获取)和以下的二维码(长按可识别二维码关注):
本文转载自:微信公众账号 - PHP饭米粒,版权归原作者所有! |