PHP 有多差劲,单纯说,PHP 是非主流工业词汇里最差劲的。
PHP 词汇有 20 多年的发展史,由于一直保持相容。存在许多差劲的地方,比如说:
纷乱的表达式重新命名不亲善的 Array/String 表达式,迄今字符串和字符串的操作都没同时实现 OO USB纷乱的模块次序,引致完全讲错两个表达式的用语,每天须要查指南或借助于 IDE确切的说的 Zend API ,引致了在应用领域与Mach之间,极难有两个第二层。比如说 Node.js 做的就较好,它提供更多的 C++ API 能让其它 C++ 开发人员很方便快捷heard Node 撰写扩充组件。而 Zend API 几乎是冥界模式,对开发人员要求太高了。我在今年新开发的PHP-X是为了解决那个问题缺少触发器 IO 应用层,PHP 非官方只提供更多了 sockets、stream、select 等 IO 表达式,无法满足现在大mammalian时代的需求。所以就有了Swoole 那个工程项目缺少对多处理器的全力支持,虽然有两个 pthreads 工程项目,但那个连玩偶都称不上。多处理器须要 PHP 词汇下层进行全力支持,而 PHP 结构设计Hathras就没考虑过多处理器当然,PHP 也有明显的缺点,比如说其布署对于应用领域软件的亲善超过(除了有名的 ASP 之外的)所有其它非主流词汇,因此在网络应用领域爆发末期就攻占了巨大市场,一些世界上最大的中文网站起初(甚至迄今)都是 PHP 写的,这是其迄今耸立不倒的核心其原因。
如韩天峰所说,PHP 的差劲主要源于于发展史本钱。
当为,其它词汇也有发展史本钱呀?确实,但 PHP 的发展史本钱特别严重。
这有几个其原因。
第一,PHP 起初结构设计(相比其它编程词汇)就很不专精。尽管 Rasmus 是个很杰出的开发人员,但词汇结构设计方面不是他所专攻,而且一开始他根本没急于做个词汇,而只是给自己个人使用的单纯开发工具。这些发展史能另行翻查 Rasmus 的专访。这引致从结构设计到同时实现都有许多辅助性的措施。怪异的UTF预设(PHP黑系列产品之一:PHP 为什么UTF准则是如此球状?),表达式重新命名不一致(PHP黑系列产品之二:PHP 为什么表达式重新命名是如此不一致?)等的根源都是这些未经结构设计的偶然因素。即使下层代码在PHP3之后就基本重写了,但由于后面提到的其原因遗毒迄今。
第二,PHP 的后续开发(相比其它编程词汇)也缺少词汇结构设计专家的参与。一些借鉴其它编程词汇的新特性虽然总体上还是可用的,但是可能存在微妙的语义问题或同时实现限制。一些结构设计错误并没被修复,反而被延续和扩大。最典型的比如说允许表达式、常量同名,本来在PHP引入类、USB的时候就应该修正,但结果是允许类、表达式、常量同名。这引致当 PHP 发展到今天,常量不能是闭包(Why PHP doesnt allow anonymous functions inside CONST?),引致重新命名空间必须用 use const/function 这样脱裤子放屁的语法(那个问题以后我有空会在《PHP黑系列产品》中单独讲一讲)。一些常用库的结构设计和改进也全凭运气。比如说 JSON 相关的 API 的扩充和变更中出现了明显的失误(主要是由于后续维护者没能理解和保持起初 API 的隐含约束,以后我有空会在《PHP黑系列产品》中单独讲一讲)。
第三,PHP 社区信奉实用主义。实用主义不是不好,但过度的实用主义引致 PHP 社区普遍低估其它因素(如编程体验)的重要性。PHP 发展史上的巨大成功加剧了这种心理倾向,进一步削弱了改善动力。这可能也造成了对词汇改善有想法的人(包括词汇结构设计专家)与 PHP 社区的互相排斥。这反过来恶化了第二点。另一方面,由于 Rasmus 本人并没领导 PHP 后续开发,也没像 Python/Ruby/Perl 等词汇的创造者那样保留对词汇发展关键问题的最后的『仁慈独裁』权力,使得 PHP 后续发展发展史上缺少敢于拍板做革命性修正的灵魂人物(所谓革命性修正,如 python3、perl6、ES6 等,注意这里不讨论革命性修正的具体得失)。
其实自从 PHP 5.4 之后,PHP 核心社区在词汇改善上是有许多进步的,包括敢于做一些破坏兼容性的修改,开发节奏也比以前要快许多。PHP 7 更是两个非常巨大的改进。我们也看到了许多致力于提升开发体验和解决发展史问题的 aggressive 的提案。但更广泛的 PHP开发人员社区心态上还是没跟上(此处国外了解不多,主要谈国内)。举个例子来说,本问题下的某个认为『PHP 谈不上有多差劲』的高赞答主,之前在许多其它涉及 PHP 的问题发出『JIT 也不见得快』的评论。PHP 7 没有做 JIT 的其原因,鸟哥解释过。差劲的是,一些人把鸟哥的解释理解为『PHP 不须要 JIT』,或者『JIT 没用』,并且反以(没JIT)为荣。实际上真正的其原因是 PHP 以前的同时实现太差劲了,以至于上了 JIT 也没卵用。在 PHP 7 重写了下层的zval 之后,现在已经重新上了 JIT 并体现出了可观的性能提升。当然,我是不指望这些人能承认打脸的,他们只会继续拿这些事情来宣扬 PHP 是『最好的词汇』。
PHP 社区的问题还表现在缺少生态多样性。同样是引入静态类型的方言,Hack 的接受程度远远小于 TypeScript(之于 JavaScript)。注意,我不是在讨论 PHP 是否应该引入静态类型,而是在探讨两个世界顶级技术公司对其核心技术资产的推动力。PHP 领域,facebook 已经是顶级玩家。JS 领域,像 facebook 那个等级的,就多得去了。但 facebook 对 PHP 社区的影响力居然远远不如其对 JS 社区的影响力。可见 PHP 社区的差劲。我要是 facebook 的技术决策者,早晚是要抛弃 PHP 的(实际上已经开始抛弃了)。
总之,PHP 的差劲最主要在于极难摆脱发展史本钱。差劲中的差劲则是,尽管 PHP 核心开发团队确实在不断改进,但更广泛的社区似乎仍然心态保守。
先写这些吧。