中国领先的工业平台

返回贤集网 返回微头条
贤集网技术微头条APP获取

PHP7 重大改革以及提升

 山东大明消毒科技有限公司

下载贤集网APP入驻自媒体

1 Zval的改变

PHP的各种类型的变量,其实,真正存储的载体就是Zval,它特点是海纳百川,有容乃大。从本质上看,它是C语言实现的一个结构体(struct)。对于写PHP的同学,可以将它粗略理解为是一个类似array数组的东西。Zval从24个字节下降到16个字节,为什么会下降呢,这里需要补一点点的C语言基础,辅助不熟悉C的同学理解。struct和union(联合体)有点不同,Struct的每一个成员变量要各自占据一块独立的内存空间,而union里的成员变量是共用一块内存空间(也就是说修改其中一个成员变量,公有空间就被修改了,其他成员变量的记录也就没有了)。因此,虽然成员变量看起来多了不少,但是实际占据的内存空间却下降了。

2 PHP数组的变化(HashTable和Zend Array)

在编写PHP程序过程中,使用最频繁的类型莫过于数组,PHP5的数组采用HashTable实现。如果用比较粗略的概括方式来说,它算是一个支持双向链表的HashTable,不仅支持通过数组的key来做hash映射访问元素,也能通过foreach以访问双向链表的方式遍历数组元素。

新版本的数组结构,非常简洁,让人眼前一亮。最大的特点是,整块的数组元素和hash映射表全部连接在一起,被分配在同一块内存内。如果是遍历一个整型的简单类型数组,效率会非常快,因为,数组元素(Bucket)本身是连续分配在同一块内存里,并且,数组元素的zval会把整型元素存储在内部,也不再有指针外链,全部数据都存储在当前内存区域内。当然,最重要的是,它能够避免CPU Cache Miss(CPU缓存命中率下降)。

3 增加了函数返回类型的声明

function getInt() : int {

return “test”;

};

增加了标量类型的声明

function getInt(int $num) : int {

return $num;

};

新增的几个操作符

//<=> - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】

echo 1 <=> 2;//-1

echo 1 <=> 1;//0

echo 1 <=> 0;//1

// - 【a的b次方】

echo 2 3;//8

//?? - 三元运算符的改进

$a = $_GET['a'] ?? 1;

它相当于:


最新回复

还没有人回复哦,抢沙发吧~

发布回复

为您推荐

热门交流