回答一:      来源:知乎 链接:https://www.zhihu.com/question/26498147/answer/33029411   「为什么在笑话里这个程序员不说 C++ / Python / Haskell 或者别的什么语言是最好的而要说 PHP是最好的呢?」——因为说任何其他语言「最好」都并不好笑啊。 任何掌握超过两种以上非 PHP 编程语言且具有一定常识的程序员都会本能地意识到 PHP 的问题所在,曾经有一篇汇总性的文章在此: PHP: a fractal of bad design / fuzzy notepad (译文版可见:五大受损, 全面解析PHP的糟糕设计,但翻译得很烂),历陈 PHP 破败之处,激荡深远。如果你没时间去读那篇长文,那我告诉你一个简单的例子来说明 PHP 有多匪夷所思:PHP 的核心函数命名很不一致,有 「strptime」这样类 C 函数的名字,有「nl2br」这样的简写,却也有「htmlspecialchars」这样的长名。后来人们发现这种不一致并非偶然,而是当 PHP 还是只有不到一百个函数的小语言的时候,其作者决定用函数名的字符数量——来作为函数的 hash(!)。由于这个愚不可及的决定,PHP 的函数名长度要尽可能地长短有秩、均匀分布,影响一直延续至今[0]。甚至有好事者将上述文中: You pull out the hammer, but to your dismay, it has the claw part on both sides. 这一句严肃对待,做了一把 PHP 锤子:    试想你走进五金从业者公会的啤酒馆,看到墙上挂着从钉子到电动螺丝刀的各式工具当作陈列品,而你在端详一阵之后指着其中的这样一把锤子,说「啊,这是最好的工具」,你觉得酒馆里的人会是什么反应呢?    回答二: 作者:慕课网 来源:知乎 链接:https://www.zhihu.com/question/26498147/answer/265103712   这个梗的来源其实已经不可考,但是由此衍生的段子(多数为黑php)却数不胜数。要解释这个梗的由来,追本溯源就要先解释一下PHP语言自身。  PHP有很多奇怪的设计,令大部分人必须有个参考手册握在手边才敢写代码,但它仍然能够吸引众多开发者。最重要的原因是:它拥有门槛低和用户群体大的优势。      但是用户群大了,各种水平的人都会有。入门虽然很容易,但精通PHP是很难的,毕竟这个语言及其标准库里有太多未定义行为。用户群中存在不少并不够精通PHP的群体,有些人没有真正尝试过其它语言,没经历过这些语言和解释器设计不佳的部分;也有些人由于长期使用PHP,对它产生了异常深厚的情感。  于是产生了一种现象:有些人认为PHP就是最简单最完善最好的语言,并且热衷于在各种论坛等地方与其他人进行争辩。所谓一粉顶十黑,“PHP是最好的语言”的梗即由此而来,其实它并不是讽刺PHP语言本身,而是在讽刺并不深入理解PHP的开发者。      如果想深入了解这个梗和PHP为什么容易招黑,还得先从它的缺点说起:  PHP的不足  PHP尽管用户颇多,但不足也十分明显。一个“好编程语言”的标准,基本可以归结于如下几点: l 编程语言特性是有逻辑而可预测的 l 编程语言内各个元素是协调的 l 编程语言总体感官是简洁清晰的 l 编程语言执行结果是可靠的 l 程序出错时能够提供准确可靠的调试信息以供除错 但是这些PHP却明显的做得不够好: 1. 标准库的函数名、参数顺序实在是难以预测。这可能是由于PHP在短时间内快速发展,但代码风格没有统一带来的结果。  就比方说字符串操作系列函数,strpos、strcspn里两个词素没有任何分隔符,到了str_replace、str_repeat却又冒出了下划线;有些地方是bin2hex,有些地方却又是strtolower 。比如mysql_escape_string看意思是做mysql的查询串中的安全转义,这可以理解。然后它又出了个新版本,嗯——mysql_real_escape_string……等等,之前那个难道不是真的?      实际上,PHP的早期函数风格类似Perl,但是标准库里大票的东西却参考自C(于是有大批函数需要带个out参数来获得返回值)。到了PHP5之后OO部分却又参照C++和Java,于是这样混杂的风格就出现了。不仅这些,你还会奇怪既然学自这几个语言,那学来的三目运算符a?b:c,讲道理应该要跟它们一样吧?不,这玩意是独树一帜的左结合的……  2. 然后是协调性和可靠性,例如,"foo" == TRUE成立,"foo" == 0也成立,这个你说不同类型无法比较,算是说得过去,偏偏TRUE != 0,这个等于比较运算都不是可传递的了。  使用==进行比较时,会默认当做是比较数字,不是数字的话先cast成数字,所以如果不幸你拿两个字符串去比较,就会出现"233" == "0233"这样的结果。有人会说字符串比较应该用eq嘛,但是PHP也是个动态类型的东西,保不齐要比较数字的函数里传进了个字符串,它倒也不来个crash,这里就不得不先做好类型检查。好吧那不看字符串?NULL == 0与NULL < -1同时成立……  再比如[]运算符,任何东西都能用[]来取个下标,只不过这玩意要是没有下标,结果就是个NULL。还有例如变量名是大小写敏感的,函数名和类名却是大小写不敏感的。  3. 奇异的写法。简洁清晰部分,使用独有的字符串运算符eq和&都还说得过去,但是说起往一个数组末尾添加一个元素,居然有这么奇异的写法。$arr[] = $elem ,这个东西让你不得不反复考虑[]运算符到底表示什么语义,特别是考虑上一条里的万物[]。再来看看类型别名,int/integer,bool/boolean,float/double/real这几组东西其实是完全相同的。  4. PHP的异常捕获系统非常异常,很难说清楚到底哪些情况会抛出异常哪些并不会。更恶心的是整个PHP在出现异常中断时,不会有栈回溯……你在代码的数个地方调用了某个函数,然后在函数内它抛了异常,可能是调用时的参数问题,但是就是不知道到底是在哪儿调用的,感受一下这个debug场景……  虽然PHP有很多不足,导致很多人吐槽这门语言,但并不代表它不是一门好的语言。那么多人喜欢PHP并非空穴来风,下面小慕给大家扒一扒PHP的历史……  PHP的起步 PHP最初就是专为Web设计的,任何一本教程都会告诉你的Hello world例子就很能说明问题: <html>  <head>   <title>PHP</title>  </head>  <body>  <?php echo '<p>Hello World</p>'; ?>  </body> </html> 你会发现,PHP就是嵌入在HTML里的,PHP既是脚本语言,也是模板合成。  在WWW刚刚进入人们的视野不久,那时AJAX还不知在哪个角落,页面里嵌入的JavaScript在各个浏览器的实现都不太一致(尽管现在也不一致),MS还在主推浏览器里嵌入VBScript。这意味着一个Web页面如果需要实现动态内容,就不能指望依靠客户端脚本来干这件事情,服务端必须背负起这个责任。  而在当时,人们对于做Web编程,能够选择的方式实在太少。尽管CGI允许你用任何语言写服务,但是用C、C++?它们是很好的通用语言,但是并没有为文字处理而特化,对于95%的工作内容都是字符处理的Web而言,一点都不方便。J2EE标准还不存在,Java的运行速度仍然惨不忍睹,至于Python家族的各种框架、Ruby家族的Rails,都还没有出生。很多人只能用对字符处理更加友好一些的Perl,然而尽管Perl对于各种工具脚本非常好用,但对于CGI并不顺畅,加之Perl哲学强调“一件事情不止有一种做法”,导致各种Perl代码风格迥异,被戏称为write-only,写没问题,读起来就不一定了。  这时候PHP出现了,它模板引擎式的脚本是个创举,引起后来的ASP和JSP竞相效仿。大量固定的文字不再需要塞进变量里再去print,而是直接写在PHP标签外即可,大可以用FrontPage/Dreamweaver先做好页面,再把需要使用动态内容的部分用PHP标签进行填充,这大大节省了开发的时间。  另外PHP用C扩展十分简单,文档也很详细,很快就吸引了大批Web开发者,进而产生了滚雪球效应——用的人多了,稍微改改就能拿来用的东西也就多了,然后吸引了更多的企业和开发者,一个繁荣的PHP社区就这样出现了。  PHP的繁荣  2002年之后,随着互联网行业逐渐兴起,市场对开发人员的数量需求越来越大,更多的人开始学习编程,主要是Web开发。PHP期间圈了大量的粉丝:首先,PHP很容易学,文档友好,用户数量多,容易上手;其次,PHP有庞大的社区,有众多的开源和闭源作品,其中不乏优秀的成熟产品(如Discuz!等),即使不太会编程也能迅速搭建一个网站。到后来,稍微会一些PHP,不要求太深入,就能找到一个不错的工作岗位。对于企业而言,如果需要做Web相关业务,招会PHP的人也比较容易。      PHP也在这期间不断进步,2004年的PHP5真正意义上拥有了一套面向对象功能,这吸引了众多使用C++和Delphi的传统桌面软件开发者加入Web开发行列,PHP最为繁华的时代由此开始。那时去逛书店,计算机类书籍中,PHP至少会占专门的一个书架。  PHP的现在以及将来  尽管PHP最初是以模板+脚本的形式进行设计的,但随着时代演变,也出现了诸如Laravel这样的以现代化的,对前后端分离、微服务设计等十分友好的框架,使得PHP并未完全在现代Web中脱离主力队伍。同时,由于Facebook等公司、PHP团队以及众多社区开发者的努力,HHVM、PHP7的出现不断提升着PHP的性能,使得最初优于Java随后被超过的PHP,和Java又重新站在了同一起跑线上。  而顺应时代的需求,NodeJS就如当年的PHP一般迅速崛起,以及Java携JVM平台上各种语言的快速演进,加之前后端分离、微服务等趋势使得Web后端字符串处理需求的降低,PHP想再现当年的辉煌恐怕不太容易……  对于PHP开发者而言,如果想要继续坚持PHP,最合理的策略应当还是积极学习,加深对PHP、对Web编程的理解,利用好PHP本身的优势。      那么,PHP到底是不是最好的语言?据说这是PHP是最好的语言的证据:         小慕不敢说PHP是最好的语言,但它却是一个入门快、普及率高的语言。存在即合理,毕竟PHP曾经如此的繁荣,现在也算不上落寞。    对于这个梗,比较赞同慕课网的回答,也认同这个答案;PHP虽然借鉴了C等其他语言,但并不是一昧的抄袭,也有自己的特色(如strtoupper,str_replace函数的语法,ps:这不是贬低,因为本站也是用PHP写的)虽然语法有些另类。存在即合理,这个梗并不是讽刺PHP语言本身,而是在讽刺并不深入理解PHP的开发者。所以,老铁们加油啊!


最后修改:2018 年 01月 28日 22:55:48

文章声明:本文系转载或收集整理于互联网,如有侵权请邮件告知本站删除。
本文标题:「PHP 是最好的语言」这个梗是怎么来的?
本文标签:PHP,梗,最好
如果觉得本篇文章对你有用,请随意赞赏;赞赏将用于服务器、域名开支