最近和几个来应聘的中工聊了聊,基本都会问他们一些7和5的去区别
虽然7升级来已经很久了,可能大家项目中都已经在使用,但是一些面试者的回答让我不算满意
他们大概分为以下三种
1.直接说不知道的,会使用,没研究过。最多也说一句,性能提升,这种你就跟说“你是个好人”是一样的敷衍
2.了解一些,能说一些具体写法的不同,大概性能提升的原理,但是看样子也是看了看网上文章,不算精通
3.极少数能深刻解析的,而且参数了项目的升级,以及能够再次去钻研和分析的
首先,是要说明性能提升的,然后可以补充下什么导致的提升,然后在哪方面有提升
其次,可以具体举例一些写法的不同,无论你是看博客来的,还是真正实践开发而了解的
最后,如果你参数了项目重构和升级,聊聊你在项目中的定位和做了哪些事情
能回答出以上三点的,其实就不错了,因为你不是初学者,不会再问问a++和++a的区别了,
有些架构的东西你要学会而且你要学习怎么表达
1.性能为什么提升?
变量存储字节减小,减少内存占用,提升变量操作速度
改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率
通过宏定义和内联函数(inline),让编译器提前完成部分工作
比如:数组结构的改变
7为字符串单独创建了新的结构体类型`zend_string`
struct _zend_string {
zend_refcounted gc;
zend_ulong h;
size_t len;
char val[1]
}
除了char *指针和长度,增加了一个h存储hash值,数组的键名查找不需要反复计算hash值.
以前,虽然HashTable数据结构的查找时间复杂度是O(1),但是每次键名的字符串都需要hash函数
计算成hash整数,但是实际情况是,php程序运行起来后,key几乎是不变的
所以7中直接的把hash值存储起来,节省大量的cpu计算时间,优化性能
2.具体哪些写法的不同
(1)php7移除了一些拓展,比如mysql、 ereg等
(2)session_start()可以定义数组
(3)可以导入同一个namespace下的类简写 use some\namespace\{ClassA, ClassB, ClassC as C};
(4)有了伪随机数产生器:random_bytes() - 加密生存被保护的伪随机字符串。 random_int() - 加密生存被保护的伪随机整数。
(5)使用 define 函数来定义数组 define('sites', [ 'Google', 'Jser', 'Taobao' ]);
(6)php标量类型和返回类型声明 ,开启:
declare(strict_types=1)
(7)三元运算符? : 的 ?? 简写
鸟哥的PPT里放出过一组对比数据,就是WordPress在PHP5.6执行100次会产生70亿次的CPU指令执行数目,而在PHP7中只需要25亿次,减少64.2%,这是一个令人震撼的数据。
在鸟哥的整个分享中,给我最深刻的一个观点是:要注意细节,很多个细小的优化,一点点持续地积累,积少成多,最终汇聚为惊艳的成果。为山九仞,岂一日之功,我想大概也是这个道理。
毫无疑问,PHP7在性能方面实现跨越式的提升,如果能够将这些成果应用在PHP的Web系统中,也许我们只需要更少的机器,就可以支撑起更高请求量的服务。
PHP7正式版的发布,令人充满无限憧憬。