这门语言现在到底处于生命周期的哪个阶段?其定位到底是怎样的?诸如 PHP7、Swoole 的出现到底能给 PHP 带来怎样的变化?
当我们拿 PHP 和 java 进行比较的时候,我们往往就两门语言本身进行比较,如一个是弱类型一个是强类型,一个是数组打天下一个是各种数据结构,甚至连花括号是不是换行写都会被讨论一番。但它们真正的区别并非这些。
当我们谈论一门语言的时候,我们是在谈它的生态。
“生态”一词在百度百科上的解释是:“生态一词,现在通常是指生物的生活状态。指生物在一定的自然环境下生存和发展的状态,也指生物的生理特性和生活习性。生态(Eco-)一词源于古希腊字,意思是指家(house)或者我们的环境”。
生态具有如下特点:
生态是系统,由多个部分组成的完整体;
生态是开放系统;
生态具有动态平衡性;
维持其动态平衡的是源动力,源动力一旦消失,生态即消亡。例如地球生态系统的源动力是太阳能;一旦太阳消失,地球生态则不复存在(想想《流浪地球》);
一种生物的生存状态不取决于生物自身,而取决于环境,就如恐龙的灭绝并非恐龙自身退化了,而是环境改变了(或者说恐龙的进化赶不上环境的变化)。
一门语言的兴衰不取决于它自身,而取决于环境,具体来说是环境中源动力的强弱。
PHP 应 Web 而生,考查其兴衰得考查互联网的发展。
一般认为互联网大致经历了三个阶段:
阶段一:Web1.0 时代,传统的内容网站,如企业官网、行业门户网站等,网站自身产生内容,用户仅查看内容;
阶段二:Web2.0 时代,用户参与内容的创建,如论坛、博客。阶段一和阶段二都是内容为主,服务为辅(虽然内容的产生方式有所不同);
阶段三:移动互联网时代,信息流、内容与服务并存;
以上三个阶段的演化中,用户参与度越来越高,交互方式越来越丰富,网站流量越来越大。
阶段一和阶段二是 PHP 的黄金时代,从阶段二开始悄悄发生变化,而到了阶段三,PHP 的黄金时代基本结束。
PHP 这门语言的特点是“简单、实用”,入行门槛极低,一个编程小白,一周入门,两天出个网站。一个典型的例子,在数据结构上,不像其他语言有 Array、List、Map、Set,PHP 一个 Array 搞定所有的情况。
PHP 的这种“简单”是通过牺牲性能为代价的。由于需要简单,不能有各种类型限制,PHP 必须是动态语言;由于需要简单,能封装则封装,一个 file_x_contents 搞定文件(甚至是网络)读写(该函数是一次性将文件全部加载到内存中,很多人开发不考虑其局限性而用在所有场景,导致内存溢出);由于 Array 承包了所有集合型数据结构,其底层需要做各种处理不说,业务层也无法自主选择更合适的数据结构做针对性的优化(虽然后来 SPL 提供了一些基本数据结构)。
PHP 的这种“简单”还牺牲了另一样东西:程序员的专业素质。PHP 程序员根本不需要去了解真正的 Array 和 List 有什么区别,也不需要去管数据流、缓冲区。从长期来看,这一点是致命的,它使得 PHP 生态中的重要一环很脆弱,很可能是导致 PHP 最终衰落的真正因素。
在 Web1.0 时代,一方面内容产生者是网站自身,另一方面人们只能通过桌面浏览器上网,这些因素使得这个阶段绝大部分公司根本不会遇到高并发等性能问题,而且业务的简单性使得单体应用足以应付一切,因而这个阶段 PHP 的缺陷根本不足为患。于是,PHP 的优势(简单上手、快速开发)让这门语言大行其道,什么 JSP、ASP,根本不是对手。那个时期,人们谈论 java、C# 时,基本是在谈 ERP,只有 PHP 才是 Web。
到了 2.0 时代,论坛、博客、SNS 的出现,使得用户创建内容成为可能。由于用户的积极参与,网站服务器流量相对于 1.0 时代有了突增,特别是 SNS 的信息流特性,使得服务器面临相当的挑战。不过由于人们仍然是通过 PC 浏览器上网,在一定程度上限制了使用频率。这个时期,一些大公司针对 PHP 的性能缺陷做了自己的改造,如新浪的各种 c 扩展(yaf、yar 等),facebook 的 HVVM。
在这两个黄金时代,PHP 世界涌现了大量的经典开源项目:WordPress、ecshop、Magento、Discuz、Thinkphp、Yii 等。
彻底结束掉 PHP 黄金时代的是移动互联网的到来。iphone 改变了世界,也改变了 PHP 的命运。
移动互联网时代,人们随时随地都能上网,而且几乎每人一部手机,这带来的直接效果就是 Web 使用需求出现了数量级的增长。另外,移动互联网时代的另一个特点是内容+服务的一体化,网站不再只是提供内容,还提供服务(如各种 O2O),因而在使用频率、交互体验上的需求都大大增强。