php phylogeny - yaokun123/php-wiki GitHub Wiki

php内核分析-发展史

一、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的新特性

1、太空船操作符:<=>

太空船操作符永于比较两个表达式
例如,当$a小于、等于、大于$b时它分别返回-1、0、1

echo 1 <=> 1;//0
echo 1 <=> 2;//-1

2、类型声明

declare(strict_types=1);//strict_types=1表示开启严格模式

3、null合并操作符??

$page = isset($_GET['page']) ? $_GET['page'] : 0
等价于:
$page = $_GET['page'] ?? 0

4、常量数组

define("ANIMALS",["dog","cat","brid"])

5、NameSpace批量导入

use Space\{ClassA,ClassB,ClassC as C}; 

6、throwable接口

try{
    undefindfunc();
}catch(Error $e){
    var_dump($e);
}
或
set_exception_handler(function($e){
    var_dump($e);
});
undefindfunc();
//php5无法捕获错误、PHP7可以捕获

7、Closure::call()

class Test{
    private $num = 1;
}
$f = function(){
    return $this->num+1;
}
echo $f->call(new Test);

8、intdiv函数

echo intdiv(10,3);//3

9、list的方括号写法

$arr = [1,2,3];
list($a,$b,$c) = $arr;
等价于:
[$a,$b,$c] = $arr;

10、抽象语法树(AST)

($a)['b'] = 1;

八、PHP8

出处:https://www.cnblogs.com/pingyeaa/p/9526307.html