耗时与php5.6相比有2.991s降到1.186s。QPS(每秒查询率)由5.6的112变为311。注意没有php6,php6是失败的作品,10年就取消了,由php5.6变到了php7。今天面试官问我用的什么版本,我说5.6她说用这么老的版本。
1.PHP的标量类型声明
PHP原来都是弱类型,方便上手,但是有的时候需要规定好的数据类型。在PHP7中就添加了变量类型的定义和函数返回类型的定义。
有int,float,string和bool。
给php文件添加了一句可选指令declare(strict_type=1);必须是文件的第一句。
1表示严格类型校验模式,0或者没有这句指令表示弱类型校验模式。
通过这句指令来使该php文件内的函数调用、语句返回都严格按照变量类型。
如果没有这一句指令,则就算定义了变量类型,也是弱类型,会像原来一样,自动匹配。
这一句只影响自己,不影响include等的其他文件。
http://hansionxu.blog.163.com/blog/static/241698109201522451148440/
这里讲的比较细
2.有很多error变成exception
PHP7有一个全局的throwable接口,部分error变成了exception,如果使用try...catch那么就会抛出exception,否则抛出error。
如果是exception,程序会继续运行下去,如果是error,则程序停止运行。
3.AST(抽象语法树)
原PHP的编译过程为:PHP代码--->Parser语法词法解析--->Opcode中间字节码--->执行
PHP7的编译过程为:PHP代码--->Parser语法词法解析--->AST抽象语法树--->Opcode中间字节码--->执行
4.Native TLS(原生线程本地存储)
PHP的多线程模式下,需要解决『线程安全』的问题,因为线程是共享进程的空间,所以线程需要构建私有空间存储私有数据。
PHP5用全局大数组,通过独有的key值来访问。PHP7采用一个全局的线程特定变量来保存key。
5.新的操作符
<=>组合比较符,如果小于,返回-1,等于返回0,大于返回1,
??合并运算符,A??B,如果A为空则为B,如果A不为空则为A。
unicode转义语法"\u{1234}"。
**为幂运算。
$a?:1;如果$a不为空则为$a,否则为1。
非变量array和string也有下标,例如array(1,2,3)[0],"abcde"[0]。
6.使用use来导入类、函数、常量,同一个文件夹下要放很多个,php5就要一个一个的use,PHP7就可以一次性导入。
7.还有一些底层的部分的修改,先不看了吧。