「PHP」为什么开发人员讨厌 PHP?
首先说一句,“PHP 是世界上最好的语言。”懂的都懂,这是一个有历史的、承载了程序员黑色幽默的梗。但是,这些年以来,“PHP 已死”、“PHP 行将消亡”之类的言论甚嚣尘上,由此看得出,很多开发人员讨厌 PHP。这又是为什么呢?PHP 真的就这么令人讨厌吗?答案是:No!
PHP 是世界上网站使用最广泛的语言,也是最讨厌的语言。而且人们对它的恨,是纯粹的恨。为什么会有如此多的开发人员对它恨之入骨呢?今天就让我们来谈谈仇恨的源头,看看它是否真的让人如此憎恨。
别碰我的 PHP
如果我说,全世界的开发者都很讨厌 PHP,这并非我的一家之言。在最新的 Stack OverFlow 调查中,来自世界各地的开发者将 PHP 列入最讨厌的语言前五名。而最新的 Hired 调查显示,PHP 位居最讨厌的语言前两名。还有很多类似的调查结果,我甚至都不想提 Reddit 上人们是怎么看待 PHP 的。如果你是有着 20 年经验的 PHP 开发人员,来这里就是为了把我钉在 Symfony(一款基于 MVC 架构的 PHP 框架)的祭坛上,请放松! 我们是来聊天的,请把枪放下,好吧?现在,恰恰相反,如果你对 PHP 深恶痛绝,那就吃点爆米花,找个舒服的姿势坐下来,跟我们一起聊聊。
话说很久之前,我自己也在做一些 Symfony2。而且我也很喜欢 Symfony 这个玩意儿,说实话,这玩意儿还挺好使的。我把这事儿告诉了一名开发人员,他是我在一次 DevOps 会议上认识的哥们。但我万万没想到,他会如此震惊,感觉都快要呕吐了,我忘不了他看我的眼神,就好像我屠杀了一名新生儿似的。为方便起见,从现在开始,我就姑且称他为 James。于是,我马上问 James 一个问题,为什么对 PHP 如此憎恨呢?
PHP 过往的混乱
要想了解接下来的内容,你需要结合一些背景知识。为做到这一点,让我们稍微回顾一下。那是 1994 年, Rasmus Lerdorf (1968 年 11 月 22 日出生于格陵兰岛凯凯塔苏瓦克的程序员,拥有加拿大国籍。他是编程语言 PHP 的创始人,其中 PHP 的头两个版本是由他编写,后来他也参与 PHP 后续版本的开发)正在快速地编写一个 C 工具套件。这套工具用来管理他的个人网站。Rasmus 当时只是为了解决自己的需求才开发的。他也从来没有想过把它变成一种编程语言。这个工具套件中并没有任何东西是为了成为工具而设计的。一年后,Rasmus 发布了这个当时被称为 PHP/FI 的开源工具包,看起来是这样的:
<!--include /text/header.html--> <!--getenv HTTP_USER_AGENT--> <!--ifsubstr $exec_result Mozilla--> Hey, you are using Netscape!<p> <!--endif--> <!--sql database select * from table where user='$username'--> <!--ifless $numentries 1--> Sorry, that record does not exist<p> <!--endif exit--> Welcome <!--$user-->!<p> You have <!--$index:0--> credits left in your account.<p> <!--include /text/footer.html-->
与你今天在庞大的 PHP 7 框架中使用的东西相去甚远,不是吗?然而,所有这一切都来源于此。接下来的故事是这样的:1997 年,代码被一个开发团队接管,当年发布了 PHP/F12。1998 年,代码一部分被重写,发布了 PHP 3。1999 年,PHP 的核心被完全重写,发布了 Zend。第二年发布了 PHP 4。2004 年,PHP 5 与 Zend 2 一起发布。PHP 6 被取消了,因为此时的 PHP 开发已经变成了人间炼狱。最后,通过对该语言进行又一次的重大重写:2015 年,发布了 PHP 7。我记得当时我非常激动。但最初,Rasmus 只不过是编写自己的东西而已。2004 年,他曾接受过一次采访,讲述了一些不可思议的事情。
我真的不喜欢编程。我开发这个工具的目的,就是为了减少编程的工作,这样,我就可以简单地重用那些我不知道如何停止的代码,我从来也没有打算过要编写一种编程语言 [……]。实际上我根本就不知道要如何编写一种编程语言,我只是不断地添加下一个逻辑步骤。
不一致且设计糟糕
回到 2019 年,我和朋友 James 一起参加聚会。在聚会上他就立即跟我吐槽起 PHP “恶心” 的语法。这门语言是如何没有类型的,这门语言是如何变幻莫测的。无论是操作符的使用,还是函数的命名,都存在令人难以置信的不一致性问题。我就不给你一一列出 PHP 的问题了,要不然,这篇文章就会变得奇长无比,占用你一整天的时间才能阅读完毕。
如果你真想知道这一切,那么我就会发现你是世界上最讨厌 PHP 的人。不,其实我觉得最讨厌 PHP 的人就是他自己。所有这些帖子都验证了 James 曾对我说过的话。开发者之所以讨厌 PHP,是因为它是一种技术上不一致、设计糟糕的编程语言。当你将它和其他编程语言进行比较时,这对比就显而易见了。如果你读完这两篇文章后,还不承认 PHP 的确存在一些问题的话,那就是因为 PHP 已经成为你的信仰。而我也不会试图去说服 PHP 狂热分子。
使用 PHP,很容易产生糟糕的代码。而其他编程语言的限制就更多了。我们还看到 PHP 存在很多安全问题。而这里的问题也是一样的。使用 PHP 也很容易产生槽糕的、不安全的代码。但并不是说,只要你编写出正确的代码,PHP 就不是一个安全漏洞,也不会注定出现难看的代码。开发人员之所以讨厌 PHP,是因为使用一种允许如此多自由的语言中,更容易出错。
PHP 成功的牺牲品
在这种环境的仇恨还有一个重要因素。开发人员讨厌 PHP,是因为它无处不在。我这个博客就是在 PHP 7 上运行的。像大多数网站一样,我只需托管一个动态页面,然后将其缓存。PHP 就可以胜任这项工作。是的,语言本身并非最好。是的,我可以使用高超的技术栈。但谁在乎呢?PHP 以一种快速而方便的方式满足了我的需求。也正是因为这个原因,80% 的网站都是用 PHP 运行的。
当我向 James 解释同样的事情时,他就开始发疯。就和你我一样,James 也有朋友和家人。这些人经常就专业和个人网站的问题向他寻求帮助。这些人的网站经常是用什么语言写的,你猜猜?于是,James 发现自己不得不经常修改 PHP 中的内容,他经常为此感到头疼。
随着 WordPress 的出现,它在互联网上占据了主导地位,James 将在很长一段时间内使用 PHP。顺便提一下,我跟你说的这种语言好像只能处理像我这样的博客,但显然事实并非如此。Facebook、Wikipedia、Yahoo!、Flick、Tumblr 等所有这网站都是用 PHP 运行的,每个月都毫无畏缩地迎接数以百万计的用户。PHP 在这方面做得非常好,而且也已经做了很长时间。
未来已成定局的老人
十年来,你一直听到 PHP 即将消亡的消息。但 PHP 一直都健在。尽管有时间和最新的架设技术,它依然纹丝不动。开发人员讨厌 PHP,是因为它与那些炒作驱动的开发背道而驰。在一个人人都迅速投资最新事物的行业里,PHP 就像一个不想出售土地的老人,一个继续傲慢地跳舞的老人。
我和 James 的讨论照常进行,突然间,他告诉我一些完全令人震惊的事情。“PHP 是迄今为止你所能找到的最慢的 Web 语言。”当他这样说的时候,我就知道他已经很长时间没有读过任何有关 PHP 的东西了。
PHP 的发展,并不在于声誉
在许多开发者的心目中,PHP 一直停留在版本 4。当这门语言不稳定时,具有灾难性的性能,且不存在的面向对象进程设计。开发人员讨厌 PHP,是因为他们认为这门语言已经停滞不前有 20 年了。当你今天去了解 PHP 时,你就会知道它已经远远超过当年的 PHP 4 了。PHP 7 比 Python 和 Ruby 都要快。如果你愿意的话,PHP 7 也可以做到强类型。随着近年来出现的静态解析器,工具也在不断发展。像 Symfony 或 Zend 这样的框架强制采用良好的实践。每年都会发布一个新版本,并附有非常精确的议程。此外, PHP 7.4 具有更好的性能。还是那句话,由于篇幅所限,我不会赘述现代 PHP 正在发生的一切。如果你想知道所有的事情,我推荐你阅读这篇文章《 2019 年的 PHP 》(PHP in 2019):是时候改变你对这门语言的看法了,它已经和过去没有任何关系了。
开发人员讨厌 PHP,是因为讨厌 PHP 很炫酷。这门语言也是正因为此而声誉一直不佳。是的,留下了很强的后遗症,也存在很多问题。但对于大多数网站来说,还是有很多好东西的。
结语
大多数讨厌 PHP 的开发人员之所以讨厌 PHP,是出于优越感或无知。但不管怎样,这都是愚蠢的。你必须根据自己的需要选择一种技术。PHP 在许多场景中都非常有用,非常强大。仅仅因为它的声誉就将它排除在外可不是什么好主意。