background image

PHP 将死 何以为继?

是到了

php 落幕的时候了。就在我这个顽固的 PHP 分子正要把一个现有的 Ruby on Rails 代

码库转换成

PHP 时,我要说这样的话。历史在重演 我认为 PHP 将亡,因为我以前见到过。

大概十年之前,

PHP 灭掉了 Perl。当然了,并不十分彻底;它还坚守在某些环境里,它还有

相当可观数量的顽固粉

 丝,遗留下来的应用程序也需要维护,持续几十年。但这种语言对

于新一代的人,特别是

web 开发者,它在 1999 年就开始灭亡了,到 2005 年左右几乎完全

死了。作为在那个时期出现的新的

web 开发者,事情显的很明白而且水到渠成:Perl 已经不

适应新的应用开发环境了。在

Perl 里,页面需要冗长的公式化的 CGI 方式实现,而这些在

PHP 里却可以用基本的、缺省的编程方式实现。Perl 语言里到处都是旧时代的特征 — 引用,
不方便的数据结构,还有其他许多的小的古怪语法语义

 —— 这使得 web 开发冗长,不稳

定,不方便。无怪乎没有一个出色的

web 应用是用 Perl 写成的,而用 PHP 你却能做的又快

又简单,尽管

PHP 存在着在当时就显而易见的缺陷。

1999 年支持 Perl 反对 PHP 的争论有很多:Perl 要快的多,有更多的程序库和驱动支持,

CPAN 是个神奇的地方,里面预先写好的代码能让你绝大部分任务省去 80%的工作量。现在
看起来这些就有点可笑了,但

“PHP 缺乏可扩展性”却是个真正的缺点。但总之 PHP 赢了,

因为上面所说的这些问题并不是这种语言固有的。

PHP 解释器可以变得更快,程序库可以被

开发出来,

PERA 和 PECL 目前已经变得相当庞大,这还不包括各种厂商希望人们去使用

他们的

API 而提供的非正式的程序库。

时间在推移

 十年之后,我可以感觉到历史大潮正在重演。开发人员对语言的期望在前进。如

果说

Perl 最缺乏的是 PHP 里令人惊讶的灵活的“关联数组”(也就是智能哈希表),那么 PHP

现在缺乏的就是

lambdas 和方法链(method chaining)了。同时 PHP 往往是用在只要 20 行代码

就能写出一个网页的地方,而如今却是如果你不使用什么

MVC 框架之类的东西就会被认

为没有把事情做对。公式化的代码表明了问题所在:这种语言需要一个框架来替人们做这些
事情。

退回到以前,我认为那些顽固的使用

Perl 来做 web 开发的人很傻。现在,经历了十年的

PHP 开发,我处在相同的位置上了。我可以在一个小时里用 PHP 敲出一个不错的网站,在
一两天里开发出一个优秀的网站。

PHP 的性能众人皆知,我可以无限的扩展它。我雇佣过的

每个开发人员都会它,我集成过的每个系统里都有一个用它写出的打包的代码库。我深陷于
PHP 的方便性,尽管它对于我的任务并不是一个合适的语言。

转向

Ruby on Rails 最明显有潜在能力继任 PHP 的是 Ruby on Rails。Ruby 是一个新的、干净

的语言,具有现代的语言特征,松散、优雅的语法

(很像 Python)。Rails 省去了我们常见的任

务,省去了集成

web 应用里的公式化的做法,把 PHP 里三、四行的习惯写法变成了 first-

class 语言结构。这看起来极其像我需要的 PHP 替代品、能让开发工作再一次提速的东西。

我每天使用

Rails,修改一个喜爱这种框架和语言的有经验的 Rails 专家所写的 Rails 应用,

七个月后,我却不能断言

Rails 是一个正确的选择了,原因很难表达。我这篇文章的目的就

是想试图把原因说清楚。

我的主要的抱怨,必须要提的,就是性能。我之前就说过这种问题不应该被当作一种语言的
致命缺陷,它只是语言实现中的暂时的问题。所以我不能把这当作一个真正的问题,尽管它