Practical PHP Programming

同其它语言的对比

对大部分程序猿来说,PHP不是web开发唯一的选择,虽然我可能因此收到恐吓邮件,但我还是要说PHP通常也不是最佳选择。

为了能使你对PHP有个全面的认识,我在这里简要介绍一下其他语言,以及在完成某些特定工作时,他们比PHP好的地方。

1. Perl

Perl是除了PHP以外最流行的语言,大概是因为它也是最老的语言。首先,Perl安装基数很大,同时很多开源项目都需要Perl才能正常工作。它的优势是(非常)灵活,同时还有已经完成的大量的模块。然而,当你没有真正理解你在干什么时,很容易用Perl写出容易混淆和让人看不懂的代码,这一直接导致了一年一度的Obfuscated Perl Contest这样的奇葩赛事。

写得好的Perl代码通常看起来和PHP代码风格很像。导致Perl代码看起来很乱的原因是很多Perl程序员是“一行流”——把大段的代码压缩到一行当中。Perl的作者Larry Wall曾经这样精确描述过Perl:O'Reilly关于Perl的书的封面应该是骆驼,虽然很丑,但是很有用,不用太多滋养就能够走很远。

当你用使用一些既有的库的时候,相较于PHP,Perl通常是个更好的选择。Perl的库仓库CPAN是很大的,给你的使用、自定义和重用提供了很大的空间。Perl本身有一个活跃的,同时也是很酷的黑客社区,称为其中的一员是很有意思的,如果你需要,作为后盾也是很不错的。Larry Wall和Damian Conway (两人都是Perl的核心开发者)都是正直可敬的顶尖科学家——通过做一些很酷的新奇的工作来推动编程事业的发展。他们两个都很友好,每年也都出席很多的会议——如果你碰到他们了,不妨走上前去,向他们介绍一下你自己。和他们交谈真是一件很吸引人的事情。

2. ASP.NET

ASP.NET是微软试图在web开发市场占有一席之地,同他们家的服务端IIS一同推出的。ASP.NET一经推出,就受到开源社区的猛烈抨击:ASP.NET是有专利的,只能在Windows平台上运行,而且还慢。

对此,我想说“是,是,是”,但我不想因此蒙蔽了你的眼睛。事实是ASP.NET已经可以被部署在其他的平台上,只是在Windows上有IIS,由于.NET在背后支持,跑起来确实更轻快一点。

如果不考虑ASP仅仅能在IIS上完美运行的事实,想想你可以用C#、VB.NET或其他.NET语言来给ASP.NET写后端代码,整个解决方案还是挺吸引人的。只是在其他平台上,ASP.NET几乎没有什么特性,运行起来也是相当慢。当在Windoes上运行时,授权费用可能成为最重要的问题,特别是整个项目全部采用微软的解决方案的情况下。

ASP.NET在采用微软全套的时候还是很不错的。

作者说明:如果你从ASP向PHP迁移,你可以考虑一下ASP2PHP这个在两种语言之间进行转换的免费软件。虽然它并不完美,但是能在你迁移一个大项目的时候给你一个好的开头。最好的方式是先用这个工具进行迁移,然后手动调整并优化代码来确保项目没有bug并优化性能。访问http://asp2php.naken.cc下载ASP2PHP。

3. Ruby on Rails

我不想假装Ruby的语法很好,因为事实上就是不好。但是Rails通过给你实现做了很多工作,使得Ruby看起来很酷,同时在易用性上将PHP远远甩在身后。Rails开发同苹果(Apple)的关系非常密切,二者也非常相似:一旦你用上了它,你便几乎离不开它了。

从Rails来看,它并没有很好的性能——相较于PHP而言,Rails慢得像条狗,因此你很少能在大型网站上看到它的应用。然而,有句编程的谚语是“计算机时间很便宜,但程序员的时间不是”,所以,当你需要处理大量的系统资源,同时又不担心使用上千个CPU循环来换取更快的开发时,Rails可能适合你。

4. JSP

Java Servlet Pages通常被认为在web编程方面是一匹黑马,它被认为能够胜任web开发这项工作,同时也获得了相当一部分的社区认同。JSP相对于它的竞争者有三项优势,下面可能是它为什么这么好的原因:

  1. JSP使用Java为基础,而Java是早已被广大程序员所掌握,同时也有大量的函数可用。Java同时有良好的可扩展性,因为它可以在多个平台之间进行分发。

  2. Sun,同其它社区成员一样,努力提升该语言,同时开发了工具来支持它,也就意味着JSP在很多大企业内部得到支持。

  3. 它鼓励使用页面模板来使得代码重用最大化。PHP模板很常见,但是模板在JSP当中更加流行。

有种说法认为JSP以Java为基础,因此比PHP有更好的扩展性。这是不对的,因为大部分过度概括的话都是不对的(是的,我知道这本身也是过度概括,因此你可以尽情讽刺!)。你在写PHP代码的时候可以使用你写JSP一样的设计模式,而且PHP也可以完美扩展。

当你的后台逻辑也是用Java写的时候,JSP是一个不错的选择,因为这可以使得开发团队使用类似的语言。