来源(Web开发者)

From: http://www.admin10000.com/document/3153.html

不要再假装 PHP 是一个好的编程语言

来源:oschina 发布时间:2013-10-23 阅读次数:1491

首先必须得申明的是你得承认确实有这么个问题存在.

带着有这样一个问题的心去读本文.



承认问题

最近,就PHP语言的核心代码我偶发现两种不同的争论. 一部分人说 “我承认它语言本身不是很好,但是你看看,我们用php做了这么多的网站!” 另一部分人是这么认为 “看看我们使用php做的那些网站 - 这还敢说php这语言不好!”.

他们的重点是在表达这么多年来我们使用php做的网站都是很惊人的. 不一定网站富有很多技术含量,但是使用php给客户做的网站数量那确实是可见的. 而真正支配PHP网站项目的不是它本身是一门好的编程语言,而是它让开发者维护和建设了实用的网站. 你可能不会去挖掘 Wordpress, Drupal 或 phpBB,但是你想象下它们在过去的10年以来所被分享和相互合作的数量.

所以的网站都使用一门编程语言这的确很容易做到,但是你有木有偶尔去想过这真的很让人反感和厌恶的.

不足之处

试想去运行一个拥有 500万行代码的应用,当尝试调用这个方法的时候,但这个方法不存在的时候,该应用就会终止运行,这样肯定是不行的。

那么我这么解释吧: 让用户看到的是一个空白页面,而且显示的是并没有堆栈路径的错误(因为$user有时候在某些情况下是空),这是不行的. 对于一个运行在这可恶的互联网上语言来说,这样一个抉择所带来的巨大浪费和技术显然是不足的.

因为并不像1995那样没人关心你的留言板功能是否可用了. 即将到来的是2014了,你现在至少要做的是让用户可以看到一个比较爽眼有堆栈路径的错误信息,真诚地向用户道歉说明情况,把堆栈路径邮件给你的开发者. 至少有3个其他的网站脚本语言不会这样赤裸裸地抛出空白页面. 对于这种情是有原因的. “与专门语言一致”会给人们抛回一个反弹的问题,而这些人就会继续花一些时间来寻找问题--只有去研究来自应用的那些堆栈路径信息.

这些也是不足的地方.

你不能对一个少于4行代码且不会带来负面影响数组很可靠地取出它的第一个元素来,这是不足的地方.*[1]

在不知PHP配置的情况下,echo 5/3 的输出结果还会收到国家地区的限制,这是不足的地方.

2014年还不能在迭代程序中调用array_map或者是 “$iterator->reduce” ,这是不足的地方.

忽略一个现象:目前大多数的phper都还是依靠有关对函数和类的注释来理解的, 因为还不能收集邮件列表中的垃圾邮件,这是不足的地方.

到处高呼道"对文字的输入提示就意味着个给float类型传了一个整形而导致PHP致命的错误",把$x = (float)$x;传到一个并不恰当的地方还说是一个合理的参数,这是不足的地方.

一种不能同时从两个后台终端交互数据,还假装"承诺"什么的语言,把 “获取数据库的数据然后输出在网上”作为其公布核心的资格,这是不足的地方.

通过使用生成一些未定义的可变的错误仅能勉强使用token_get_all()来澄清错误缓冲,这是不足的地方

在某种语言中使用echo 0.000001得到 1.0E-6 ,就宣称number_format/sprintf对每个float型的数据不合适,这是不足的地方

不管怎么说,尽管你不得不用php来处理一些可能会产生没有堆栈踪迹的案例, 这些一点一点的缺陷是不能打破"php平台"的.不过是该说说这些不可思议很神秘的缺陷,它们每天都在运转,(换个角度说)是又不再有人去探索和证明它们.

所以,请不要假装"一切都很好,我不得不学php". 不,不,不是这样的,还有很多不足之处等着修正了

很好,另一个要高呼的是什么呢?

首要的事情不是给internals写批判信抱怨什么. 那样会让人感到很惊异的. 不管怎么说,倒是很少有人赞助php的核心,也并不要担心谁做了就是最好的开端,特别是像你们和我, 并没有提供很规范的解决方案.

要是你有足够的耐心,而且对互联网也了如指掌的人,要是这样, 你就该写一些RFCs来改善它,然后跟他们保联系,持保持一年或者更多时间都可以,直到都参与进来改善它. 虽然不是一个很好的系统,由于我们没有得益于这个编程语言中的独裁者,那么做起来肯定要花费更长的时间了.

从目前的状况来看,php也变得越来越具有负载性,并不是一个很好的选择,所以这些都需要修正的. 第一步就是要承认的事实是:php内核本身真的存在问题,这些问题我们得注意,然后正对这些问题可以展开一些合理的论述. 不过就我所说的和据我所知的这些问题并不是技术上的问题. 这都是大家一致在讨论php应该怎么做,应该是什么,就这样渐渐的成了没有人关注和不成文的论述了.

而且紧紧说"php开源,修正下吧",这也不会解决任何问题的.你不可能通过说有很多问题但又假装问题不存在而吸引人们去赞助某个项目. 在网络上是有一种方法,不用花费八年时间去修理一个破车就可以用相同数量的钱重获一辆新的,可以直接开的车. Java的壮大跟 Coin 一样修正小问题.

现在知道php是有问题了. 不要再假装没有了.

“php就是这样一个了不起的高兼容性语言,让你做了不起的事” ,当全部的收益都用去处理一些不利的错误时,这个说法就不没有说服力了.

你总不能让代码和E_ERROR去调用一个没有对象的类成员方法吧

谢谢

[1]: 是的,我知道$first = reset((array_values($list)));是可行的但是$first = reset(array_values($list));就不行了. 不知道你是不是想要告诉我这个怎么解决,因为我觉得这个问题感觉有点像是属于我们正在讨论的问题. 我们在这里不是来打高尔夫的.

[2]: 庆幸的是问题还没有像那样恶化下去,不过,“php是模板语言”作为争论是否保存其他不完善的功能也在四处散布.

原文地址:Please-stop-pretending-PHP-is-a-good-language

Link: http://www.asm32.net/article_details.aspx?id=6000