跟厂长学PHP7内核(一):发展史
PHP1
1994年,一位名叫Rasmus lerdorf的兄台为了在网上展示自己的履历和网页流量的统计,用Perl开发了一套脚本,后来因与日俱增的需求无法得到满足,lerdorf便使用c语言进行了重写,重写后的程序支持数据库的访问,以及web应用程序的简单开发,备受好评,随后便以Personal Home Page Tools为名发布了第一个版本。
PHP2
为了PHP的改进和快速发展,lerdorf在1995年6月8日将其开源,于是PHP2.0问世,并被命名为PHP/FI。随后,在经历了数次beta版本的发布,于1997年推出了官方正式版本。而此时,全世界已有50000个域名安装了PHP,占所有域名的1%。
PHP3
其实在PHP/FI官方版本发布之前,两位来自以色列的工程师Zeev Suraski和Andi Gutmans就已经着手于PHP解析器的重写,为PHP3.0打下了基础,所以PHP/FI发布之后,便开放了PHP3.0的测试,并于1998年6月正式发布。而此时的PHP被正式更名为PHP:Hypertext Preprocessor。
PHP3.0有强大的扩展性,除了可以给用户提供数据库、协议和API的基础结构外,还吸引了大量的开发人员加入,并提交新的模块,这也是PHP3.0获得巨大成功的关键。
PHP4
PHP3.0正式发布后,Zeev Suraski和Andi Gutmans开始改写PHP的内核,命名为Zend Engine(是Zeev和Andi的缩写),也就是我们熟知的Zend引擎。该引擎在1999年被引入PHP4.0,并在2000年正式发布。PHP4.0不仅拥有更好的性能,还支持了Session、输出缓冲等功能,吸引了大批开发者。此时安装PHP的网站已经达到了数百万,占据所有网站的20%。
PHP5
2004年7月13日,基于Zend Engine 2.0的PHP5公开发布,全面引入了面向对象机制,并保留了向下兼容性。随后5.3到5.6版本的发布,相继增加了命名空间、闭包、Traits、短数组等特性,使PHP语法越来越灵活,直到目前,仍然有许多网站使用PHP5.6。
PHP6
我们都知道,PHP并没有发布6.0,原因是曾有一群人创建了PHP6的项目,主要的目的是为PHP引擎增加Unicode支持,当时开发者们同时维护5和6的开发,慢慢的大家发现新功能都等着提交给6,而6因为开发速度慢导致很多新特性没法提交,状态很不理想,再后来6就没人开发了。最终经过PHP社群核心贡献者投票,超过7成的人同意最新的PHP版号将是PHP7而非PHP6,故PHP直接跳过了6.0版本。
PHP7
2014年,PHP7正式发布,Zend引擎被再次重写,并以Zend Engine 3.0 的身份亮相,使得PHP语言的性能得到大幅度提升,大量测试显示PHP7比PHP5.6在各种开源项目中有60%到200%的性能提升。
在这里值得一提的是,PHP7的核心开发人员,PHP5.4、PHP5.5的主要开发人员“惠新宸”,是PHP开发组核心成员,也是中国最具影响力的PHP技术专家,人送外号“鸟哥”。
跟厂长学PHP7内核(一):发展史的更多相关文章
- 跟厂长学PHP7内核(八):深入理解字符串的实现
在前面大致预览了常用变量的结构之后,我们今天来仔细的剖析一下字符串的具体实现. 一.字符串的结构 struct _zend_string { zend_refcounted_h gc; /* 字符串类 ...
- 跟厂长学PHP7内核(七):常见变量类型的基本结构
上篇文章讲述了变量的存储结构zval,今天我们就来学习一下几个常见变量类型的基本结构. 一.类型一览 zval中的u1.v.type用来存储变量的类型,而zval.value存储的是不同类型对应的值, ...
- 跟厂长学PHP7内核(六):变量之zval
记得网上流传甚广的段子"PHP是世界上最好的语言",暂且不去讨论是否言过其实,但至少PHP确实有独特优势的,比如它的弱类型,即只需要$符号即可声明变量,使得PHP入手门槛极低,成为 ...
- 跟厂长学PHP7内核(三):源码目录结构
上篇文章我们已经介绍了源码分析工具的安装.配置以及调试方法,本文我们来讲述一下PHP源码的目录结构. 一.目录概览 以php-7.0.12为例,看过源码的同学们应该发现源码目录多达十多个,下面是每个目 ...
- 跟厂长学PHP7内核(四):生命周期之开始前的躁动
上一章我们对PHP的源码目录结构有了初步了解,本章我们继续从生命周期的维度对PHP进行剖析. 一.概览 生命周期是什么呢?你可以把它看作执行过程,PHP的生命周期也就是它从开始执行到结束执行的过程. ...
- 跟厂长学PHP7内核(二):源码分析的环境与工具
本文主要介绍分析源码的方式,其中包含环境的搭建.分析工具的安装以及源码调试的基本操作. 一.工具清单 PHP7.0.12 GDB CLion 二.源码下载及安装 $ wget http://php.n ...
- 跟厂长学PHP7内核(五):系统分析生命周期
上篇文章讲述了模块初始化阶段之前的准备工作,本篇我来详细介绍PHP生命周期的五个阶段. 一.模块初始化阶段 我们先来看一下该阶段的每个函数的作用. 1.1.sapi_initialize_reques ...
- 十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见)
原文:十天学Linux内核之第十天---总结篇(kconfig和Makefile & 讲不出再见) 非常开心能够和大家一起分享这些,让我受益匪浅,感激之情也溢于言表,,code monkey的 ...
- 十天学Linux内核之第九天---向内核添加代码
原文:十天学Linux内核之第九天---向内核添加代码 睡了个好觉,很晚才起,好久没有这么舒服过了,今天的任务不重,所以压力不大,呵呵,现在的天气真的好冷,不过实验室有空调,我还是喜欢待在这里,有一种 ...
随机推荐
- Redis学习二:Redis入门介绍
一.入门概述 1.是什么 Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内 ...
- sql 恢复数据库
RESTORE DATABASE RoadFlowWebForm --数据库名称 FROM DISK = 'E:\WEBFORM2.5.1.bak' --bak文件路径 with replace, M ...
- web打印难题—背景不打印的简单不完美解决方案
web打印在一些开发中是比较常见的需求,最简单的办法是使用css print进行控制:对于一些建议可以参考http://slodive.com/web-development/css-print-pa ...
- 小程序web-view wx.miniProgram.postMessage 坑记录
web-view吧,其实微信官方应该是非常不支持在小程序上嵌套web的,它希望你直接用小程序上的代码,而放弃web的实现,当然,也是为了防止用小程序去嵌套别的广告页面.所以官方对web-view的操作 ...
- Oracle分析函数Over()
一.Over()分析函数 说明:聚合函数(如sum().max()等)可以计算基于组的某种聚合值,但是聚合函数对于某个组只能返回一行记录.若想对于某组返回多行记录,则需要使用分析函数. 1.rank( ...
- 2017ACM暑期多校联合训练 - Team 9 1010 HDU 6170 Two strings (dp)
题目链接 Problem Description Giving two strings and you should judge if they are matched. The first stri ...
- 如何和统计学家分享数据How to share data with a statistician
如何和统计学家分享数据 原文地址:https://github.com/jtleek/datasharing 将原文渣翻译的版本. 这是一份指南给需要分享数据给统计学家或者数据科学家的任何人.我认为的 ...
- WindowsServer2003双网卡配置
今天突然被问起,找资料10+分钟才找到记录,因此再次记录下: route -p delete 0.0.0.0 route -p add 0.0.0.0 mask 0.0.0.0 58.240.115. ...
- connect系统调用
/* * Attempt to connect to a socket with the server address. The address * is in user space so we ve ...
- YUV422(UYVY)转RGB565源代码及其讲解.md
目录 前言 源码 代码分析 YUV三个分量的关系 循环遍历 结束语 前言 使用zmm220核心板,IFACE102版本的内核等,4300型号的LCD,XC7011_SC1145摄像头,亲测有效. 本文 ...