标题: PHP 是最糟糕的编程语言? [打印本页] 作者: InfoQ 时间: 2021-9-30 00:22 标题: PHP 是最糟糕的编程语言? 我已有将近二十年的编程经验,并使用过各种编程语言进行开发。在我以前做过的很多工作和现在正在做的这份工作中,我非常高兴能够将 PHP 作为核心编程语言。从第一次使用 PHP 工作开始,我就听到了关于 PHP 的各种抱怨,但与此同时我也看到了 PHP 的威力。 本文最初发表于 PHPArch 网站 ,经原作者 Chris Tankersley 授权,InfoQ 中文站翻译并分享。
PHP 至少是一门有趣的编程语言。这门语言和用它构建的程序通常属于两种设计哲学。在这里,我所说的并非软件开发生命周期,如瀑布或灵敏,而是关于软件应该是什么样的基本头脑。这些头脑被称为“正确的方式”(The Right Way)和 “更糟就是更好”(Worse is better)。
PHP 又是一门相当希奇的编程语言。当人们抱怨这门语言“很槽糕”时,他们并没有说错。这门语言确实有很多不好的地方。搁在以前,这门语言还有更多糟糕的问题。嘲笑 PHP 的博文《全面解析 PHP 的槽糕设计》(PHP: a fractal of bad design)确实有几个正确的观点,即使这些观点在九年前发表时就已经过时了。
然而,与此同时,开发人员却可以使用 PHP 创建结构上“正确”的软件,并从其他语言中引入被视为良好实践的哲学。像 Laminas 和 Symfony 这样的框架就使用了面向对象编程的最佳实践,使开发者可以用这些框架编写结构正确的代码。
PHP 是怎么做到这些的?这是由于 PHP 是最糟糕的编程语言。
设计软件
1991 年,Richard P. Gabriel 发表了一篇文章《Lisp:好消息,坏消息,如何赢得大》(Lisp: Good News, Bad News, How to Win Big)。这篇文章的论点是,在软件设计和寿命方面,“更糟就是更好”的哲学将是更好的选择。他之所以得出这一结论,是由于他意识到出现了两种差别的程序设计流派,他分别将之定名为“麻省理工学院/斯坦福风格”(MIT/Standford Style),或者“正确的方式”,以及“新泽西风格”(New Jersey Style)或者“更糟就是更好”。
这两种哲学的目标相似,但在关键领域却有所差别。两种风格都偏重于哲学理念的四个关键领域:简朴性(Simplicity)、正确性(Correctness)、一致性(Consistency)和完整性(Completeness)。
麻省理工学院风格是这样描述的:
这场争论的关键是用 LISP 和 C 作为例子来说明为什么“更糟就是更好”。对于 LISP 程序员 Gabriel 来说,LISP 是一种比 C 更好的语言,速度和 C 一样快,而且 Common LISP 的设计、开发和标准化已经花了很多年。界说该语言的规范吸取了所有差别的 LISP 的精华,而当代开发环境对于 LISP 开发者来说是最好的。
LISP 是正确的方式
设计肯定要简朴,不论是它的实现照旧接口。
PHP 底层使用了 C 语言,我们之前已经说过,这部门是“最糟糕的”。然而,这也带来了一些优势,最重要的是,更简朴的底层语言可以让它更容易扩展。虽然 Hack/HHVM 接纳了更多的 C++ 方法,但 PHP 本身仍旧是 C 语言。
只需短短几个小时就能学完这门语言的内部结构。Elizabeth Smith 发表过一篇关于 PHP 扩展的出色演讲,其中介绍了大量关于 PHP 的内部工作原理。这门语言本身借鉴了其他 C 风格的语言,不但易于阅读,而且能够跟 C 风格的其他语言互相转换。
PHP 的大多数接口,或者说标准库,都非常简朴,由于大多数核心功能都只不过是包装了各种 C 语言库,然后险些原封不动地公开出来。只管这样做会导致接口上的一些不一致,但是它为来自 C 或 C++ 的开发者提供了一个熟悉的环境。
PHP 语言非常注重于 Web 开发。将 HTTP 中的概念提取出来并在语言中找到相似的概念通常非常简朴。希望了解一个请求的头信息吗?get_headers() 就能满意你。获取请求信息就像读取 $_GET 和 $_POST 全局变量一样简朴。
PHP 保持了简朴的开发者接口,而且尽可能地保持内部结构的简朴。
PHP(险些)是正确的
设计肯定要尽可能多地涵盖重要的环境。
无论何时,在针对 PHP 需求最大的设计使命:编写 Web 应用程序时,PHP 都是完备的。PHP 从未被设计成一种可以实用于编程天下所有问题的语言。只管如此,它的简朴性照旧使它可以用于 Web 以外的场合。PHP 最初的目标就是为 Web 编程提供最基本的功能,这一趋势不停持续至今。
修改核心语言通常是由开发人员的需求驱动。整个社区提出修改意见,然后经由社区投票,决定新特性被拒绝、改变或者担当。该语言的许多创新都源于快速完成工作的需要。即便我们吸取了其它语言的功能,也是由于它使我们的开发变得简朴,而很少是由于其他语言做得“更正确”。
今天,你可以用 PHP 开发 Web 应用程序。五年后,你仍旧可以用 PHP 开发 Web 应用程序,只不过会增长一些新特性。但是,语言本身的完整性已经符合今天所需。如果将来有需要,我们可以随时修改语言或为它添加新功能。
更糟就是更好吗?