我写这篇文章有段时间了,这里改改那里改改,但就是不知道什么时候发表。最近PHP 8发行,让我觉得现在“是时候了”。
每个月我都会看到有人说PHP正在逐渐过时,我们不应该在使用它。如果你在一些论坛或者Stack Overflow上看到关于“学习PHP”的问题,百分百会看到有人发类似“为什么会想要学PHP?学点牛的不香吗,比如说‘某牛语言’”的言论。
我写PHP将近20年了(可能更久,我不太记得我什么时候开始的了)。在用其他语言的时候,大多数情况下,我都会直接忽略对话的大部分内容。这么多年来,PHP都在渐渐“失去生命力”,我早就应该不用它了。在任何语言上我都称不上是专家,关于PHP我还有很多要学的,但是我发现自己一次又一次地选择它。
偶尔读到一些写的不错的劝人不要使用PHP的文章时,我也几乎被说服了,所以我花了很多时间去学习其他语言。我必须承认这些探索使我收获颇丰。虽然我可能在使用上永远也达不到专家级水平,但是通过学习其他语言,我对程序员这个职业有了更深的理解。
如果说从这篇文章中有什么东西要学的话,那就是:去学新的语言。但是不是因为“PHP失去生命力了”——这是错误的观点。你要学习其他的语言是因为这对于作为程序员的你有好处,如果PHP真的要没戏了,那么你更应该去学别的语言。但是此时此刻,它并没有失去生命力。
对于很多写PHP的程序员来说,当他们需要捍卫自己的选择时,他们可能最先会亮出一些表格,这些表格显示了PHP在全网的欢迎程度。虽然这些数字很振奋人心,我还是有些怀疑它们带有误导性。
我们必须要认识到PHP受欢迎,是因为人们对于WordPress的喜爱。无论你喜欢不喜欢WordPress,都必须承认它的存在至关重要。但是说实话,WordPress还是有很多缺陷的,并且不在少数。但是我知道很多人都用WordPress完成很多了不起的事情,也赚了不少钱。
PHP不是WordPress,即使WordPress深深植根于PHP历史的土壤中,PHP要比WordPress好得多,好得多得多的多。WordPress有很多不足的地方,PHP也有很多不足的地方,但这并不意味着它们不适用于所有项目。
我一般不会用C++去写网络程序,至少它会排在我选择清单的末尾。但这不是说C++就是种不好的语言,它只是不适用而已,就像我不会用PHP去写硬件驱动或任何和AI有关的东西,这已经超出了它的能力范围了。
对语言的选择当然也和你自身对它们的掌握程度紧密相连。就像老话说的那样:时间就是金钱,用新学的语言去进行一个项目往往是艰巨的,这会让本来就很紧张的时间雪上加霜。
我对PHP比较熟悉,所以我往往先选择它。我略懂一点Python,但是我写PHP要得心应手得多。同一项任务我也可以选Python,但是花费的时间可能会是两倍(至少刚开始是这样的)。这并不是说我之后都不会使用Python或者我对Python有什么不满的,只是说PHP是我的首选。
学习一门编程语言并没有那么难,一个有经验的程序员可能花上一个周末就能掌握一门语言的要点。但是这并不意味着他们懂这门语言。了解哪个内置函数做什么不叫懂一门语言,你必须要有足够的经验知道什么时候用什么样的特性,或者明确这整个生态系统如何结合在一起。
我懂PHP,但我也知道如何设置一个Nginx web服务器、如何配置FPM或opcache。我掌握的足够多,有能力摆脱依赖的影响,做出正确的选择。我知道如何在生产环境中安全地部署PHP应用程序,而且我知道如果不小心使用某些语言特性,可能会带来安全问题。这些事情不仅仅是“了解”一门语言就能够知道的。作为程序员,我们需要投入大量的时间来学习我们选择的这些语言之外的东西。
这就是为什么当有的程序员说你选的语言就是“垃圾”,我会感到非常失望。我花了二十年的时间去在磨练这方面的技术,现在却来了个人告诉我,我的选择是错误的?
其实这并不是错误的选择,PHP给我带来了满意的工作。我之所以能住上漂亮的房子,能开着豪华的轿车,正是因为我花了20年时间精通PHP。扯远了,应该接着讲为什么PHP不是垃圾的。
很多讨厌PHP并认为它应该被淘汰的人,会列很多点来证明PHP是大错特错的选择。有很多我们这几年来一直听到的观点都是针对PHP的骨灰版本(我不知道为什么每个人都还抓着PHP4不放,搞啥呢?)。
还有些点根本就是无稽之谈甚至是错误的。这不是争夺“我的编程语言比你好”大赛,不需要歇斯底里,我打心底里认为每一种编程语言都有它本身的使命。那些发明这些语言的人(也就是那些比我聪明得多的人)发明这些语言都是有原因的,编程语言不是随随便便就能被搞出来的东西。
那么,为什么要选PHP呢?
答案很明了:因为它就在那里。我是自学PHP的,没参加过多少正规培训,除了偶尔参加的网络培训课程,我没有上面盖着“我可以教电脑做事情”的名牌大学毕业证。
我是学设计出身的,虽然我从大概七岁开始摆弄代码和电脑,但是我对接受这方面的教育却没有同样的热情。我甚至不知道为什么,我热爱电脑热爱网络,却选择了平面设计。我不想赘述这方面的内容,因为虽然我有这个学位,但是它在我今天的工作中却没有起到太大的作用。
我相信和大多数PHP程序员一样,我开始使用PHP是因为我们想要网站做更多,不仅仅是显示一张图片和一段文字。当我学会了如何将数据从数据库里提取出来显示在网页上时,我万分激动,这太振奋人心了!这正是我想要的,所以我便一头扎了进去。
后来,我遇到了WordPress。就像那些坐在电脑屏幕前,懂一点PHP基本知识的自以为是的人改变这一切一样,WordPress也改变着一切。WordPress的成功要归于像我这样的人,我们这些年轻人想要一个自己的博客,却不知道怎么自己建立。
你安装了WordPress……然后添加了一个插件,改变了主题……然后你对主题做了一些小小的改变,所以它完成一些其他的东西,或看起来有点不同。然后你修改了一个插件。然后你创造了自己的主题。然后你在想,我还能做什么?
所以我认识了PHP,不是我选择了PHP,而是PHP选择了我。20年后我还在用PHP创造东西,早就不用WordPress了。我想我已经是个成熟的PHP程序员,有能力来写这篇文章了。
“PHP太简单了,你应该学点有挑战性的”
PHP那么受欢迎的其中一个重要的原因就是它无处不在,哪里都装着它。就连你最普通的MacBook中也预装了PHP,真见鬼。
从头写PHP也非常容易,通常没有什么特别的事情需要你做。创建一个index.php文件,在里面放一行PHP代码,然后上传到几乎所有的共享主机账户:
- <?php
- echo Hello, World! ;
然后就完成了。入门PHP真的特别简单,你不需要知道它的工作原理。你安安心心地干就完事了。然而,如果你相信的话,PHP的这种“易操性”实际上也可能是它的一种缺点。理论上讲,如果PHP如此简单,那么用PHP编写危险的代码也非常容易。
一想到这,我有点坐立难安。这是否意味着人们不太可能使用那些难的语言来编写危险的代码?我在哪里读到过,微软为Windows发布的修补程序中,大约有70%是为了解决由c++引起的内存问题(这话不是我说的)。我怀疑用c++写微软的人都是业余的,而且我很确定他们知道自己在做什么。
是的,虽然Windows比你用的购物车网站要复杂得多,但是我认为这个观点是站得住脚的。Python是公认的新手友好型语言,但是却没有人说它“危险”。用任何语言写任何危险的代码都是容易的。不是语言创造了危险的代码,而是缺乏相关的知识创造了危险的代码。
“简单”不是劝退新手学习PHP的理由,相反,这给了初学者们更好的工具,好让他们在写代码的时候做出更好的选择。这是也是帮助他们找到合适的资源正确学习PHP的原因。我还是挺幸运的,尽管我写过不少“危险”代码,我的学习之路上总会有一些贵人(不一定是PHP工程师)来帮助我找出需要改进的地方。
PHP很慢
并不。PHP 可以同步你写代码的速度。PHP是一种脚本语言,因此将其与编译语言进行比较是毫无意义的,然而出于某种原因,我看到甚至有人将PHP与Rust或Go进行比较。这些比较没什么意思。
把它和python或是Ruby比,可能还好一些,但是一种语言的“速度”是由多种因素决定的,语言本身,还有环境,运行的代码,解释器配置方式,等等。凭空就说PHP很慢是不够意思的。
对于某些类型的任务,PHP确实很慢。例如,如果从事机器学习领域的工作,可能就别首选PHP (尽管有一些很有趣的项目正展现出一些前景)。
有时你会看到一些基准测试,两种语言做同一件事,比如循环超过100万条记录,做一些简单的计算。结果往往相差几毫秒,这常常有时候被用来证明PHP运作慢(有时候用来证明快)。如果你编写的软件,在对一百万条记录进行循环时,多花几毫秒就会造成灾难性的后果,那也无话可说。
WordPress挺垃圾的
我还蛮同意这个观点的。目前我不太喜欢WordPress,但是我也承认没有WordPress,我们很可能也不会有今天的PHP社区。然而,因为一个软件就说一种语言不好也有点草率。这就好像因为你不喜欢Microsoft Windows,就说C++是一种垃圾语言一样。
PHP不是只有一种功能,WordPress也只是它的一部分。如果你想的话,有大量的框架和软件包供你选择。人们说Laravel是“让PHP再次炫酷”。我必须承认,这个框架是到目前为止我最喜欢的框架之一,并且对我来说在大多数项目中选它都是最容易的。
因为WordPress是由PHP写的,就说PHP不好有失公允。有人可能会说WordPress反映了PHP的局限性,但那是很久以前的事了,而且从那时起这门语言已经成熟了很多。
PHP不适合企业使用
为什么呢?我都不知道这种言论从何而来,但这种风真的很大。那么什么才能让一种语言“适合企业”呢?Java可能是最受企业欢迎的一种语言之一了,但是并不是因为Java本身是适合企业的。是因为Java EE平台的存在,我不是Java开发人员,所以有错欢迎纠正。
在我看来,Java是一种构建企业应用软件的平台。听起来有点像一个框架,对吧?所以可能这个问题应该是:“我最喜欢的PHP框架是不是适合企业的呢?”
要回答这个问题的话要再写一篇文章了。我想说的点就是PHP和其他任何语言一样,都是足够适合企业使用的。这完全取决于你怎样用它。
顺便提一下,我曾是一个小型团队的一员,这个团队在南非一家最重要的金融机构的内部网络上构建并部署了一个事件管理平台(我可能会写一些我在这方面的经验)。该应用程序完全是用PHP和JavaScript编写的。
随着新冠疫情的全面爆发,整个系统承受着巨大的压力,但它几乎应付了所有的压力。我们也遇到了一些问题,但都很快解决了。
PHP不可扩展
这可能是唯一一个有点理据的观点了,但是这比你想象的要复杂许多。事实上,如果你编写了像样的代码,PHP就能很好的扩展。当人们说PHP不可扩展时,他们通常指的是用PHP编写的应用程序可能无法处理非常大量的请求(比如数百万)。
问题是,这并不是那么简单的,我认为很多对它的误解来自于WordPress,最近WordPress因有扩展性问题而出名。
来举个例子,Slack是一个通讯平台,曾一度想要取email,它有几百万的用户,他们每天用的这个系统的后端就是用PHP写的。如果这还不能说明PHP可扩展,那我也无话可说了。
很多人引用Facebook作为一个很好的例子,即使我认为Facebook在一些形式上还使用PHP,但是大部分的应用都不用PHP了。但是说实话,Facebook这个例子有点特殊。
谈论扩展性绕不开基础设施。如果你在一个简单的共享主机上托管一个WordPress博客,然后你突然得到成千上万的点击……这可能是一个问题,你的主机会给你发一封令人讨厌的邮件,或者至少会给你开出比你预想的多得多的账单。
扩展应用程序涉及的不仅仅是语言选择。有很多变化的部分,每当PHP首当其冲受到指责时,我都感到难过。在适合的环境和配置下,新版本的PHP完全能够每秒处理大量请求。Laravel Vapor是一个在AWS上运行的Laravel应用程序的第一方无服务器平台,它有一些非常令人印象深刻的数字。
我有时候觉得扩展性这个问题有点夸张,我写PHP20多年了,我从来都没有遇到过每秒“数百万个请求”的情况。甚至类似的情况也没有。我们绝大多数的人都没有机会去建立下一个Facebook,无论我们有多想。
在现实中,我们建立的软件有针对性多了。我们打交道的是特定国家里的特定行业,所以我们不用担心需要面临每秒数百万个请求的情况。对于我们参与的许多项目来说,这是一个巨大的数字。这并不意味着我们所做的不重要,只是意味着我们不需要考虑那种规模,扩展应用程序以处理数百万个请求并不是我们日常工作的一部分。
PHP好丑
你怕不是在开玩笑吧,我把最烦人的这个观点留到最后说。如果你是根据外观来挑选技术堆栈的话,那我想说你错了,你真的需要去重新评估一下你的选择方式了。
话虽这么说,我认为PHP一点也不难看。有的人觉得不好看很可能是很早之前在HTML使用PHP,HTML是真的难看。问题是:现在没人这么干了,再有人这么干会被嫌弃的。
我不是说那些所谓的“美丽的语言”是不好的选择,但是“好看不好看”不应该成为你的评价标准。Java非常不好看,但却是世界上最受欢迎的语言之一。鼓吹因为PHP难看而不要用PHP真的太傻了。
PHP可能不是最美丽的语言,但是我发现写得好的话还是很有可读性的。PHP8也有一些新的工具可以让你的代码看起来更“美丽”。
我爱PHP
我真的爱PHP。我爱这种编程语言和它的生态系统。我爱它在过去几年中的完善,PHP 8不仅仅是同一种语言的另一种迭代。随着每个主要版本的发布,我们得到了更好和更有用的工具。
我喜欢PHP的易上手,但我也喜欢它的复杂,要成为一名专业的PHP程序员有太多要学的东西了。我喜欢Symfony 和Laravel,我认为开发团队作为PHP的核心,一直在推动这种语言的进步。
但是我最喜欢部分的还是当一个程序员。不仅仅是写PHP,我喜欢用任何语言写。我喜欢我可以告诉电脑可以去做什么以及我教会了我自己如何去这么做。这归功于PHP。
没有PHP,我不知道现在的自己会从事什么工作。也许我会成为一个平庸的设计师,然后讨厌我的工作和生活(没有冒犯设计师朋友们的意思,我也有一些才华横溢的设计师朋友们,他们很热爱自己的工作)。
但是最终,我用我爱的编程语言从事了热爱的工作。
本文转载自微信公众号「读芯术」,可以通过以下二维码关注。转载本文请联系读芯术公众号。
面试的时候,面试官只要看到你简历的上写的有Zookeeper(熟悉、掌握)之类,那你至...
大数据市场如今正在呈爆炸式增长。根据调研机构Markets and Markets公司的调查,...
困难是最好的教练 阿里巴巴从2008年开始建设自有的大数据体系 致力于构建好数据...
Python解释执行原理 我是一个Python线程,我的工作就是解释执行程序员编写的Pyth...
一?、背景 据IDC发布的《数据时代2025》报告显示 全球每年产生的数据将从2018年...
注册域名 要身份证照片吗?注册 域名 后,在进行域名实名认证时需要上传资料,其...
目录 一、前言 二、架构演变 1. 单体架构 2. 应用与数据库分离 3. 使用缓存抗量 ...
当前,数据的价值被前所未有地挖掘和利用,数据已经成为推动数字经济发展的关键...
企业对互联网的依赖日益凸显,虽然 服务器托管 可以带动企业高速后运行,同样也...
苹果在上周向开发者推送了iOS 15 beta 2和iPadOS 15 beta 2,这是自本月早些时候...