初识php7

php7 新特性

变量类型
php7版本函数的参数和返回值增加了类型限定。
加入类型,实际上是为了php7.1版本的JIT特性做准备,增加类型后的php JIT可以正确判断变量类型,生成最佳的机器指令。
JIT:是just in time,即时编译技术,表示运行时将指令转化为二进制机器码。
对于计算机密集型的程序,JIT可以将PHP的OpCode直接转换为机器码,大幅度提升性能,将在php7.1版本带有此特性

function test(int $a,string $b,array $c):int{
//code
}

错误异常
php程序出错后过去zend引擎会发生致命错误并终止程序运行,php7 可以使用try/catch捕获错误
try{
not_exists_func();
}catch(EngineException $e){
echo "Exception:($e->getMessage())":
}

php7性能优化

zval 使用栈内存
在zend引擎和扩展中,经常要创建一个php的变量,底层就是一个zval指针。之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配

一个ZVAL内存。而php7可以直接使用栈内存。
php5
zavl *val;MAKE_STD_ZVAL;
php7
zval val;

zend_string存储hash值,array查询不再需要重复计算hash
php7为字符串单独创建了新类型叫做zend_string,除了char*指针和长度之外,增加了一个hash字段,用于保存字符串的hash值。

数组键值查找不需要反复计算hash值。
struct _zend_string{
zend_refcounted gc;
zend_ulong h;
size_t len;
char val[1];

hashtable桶内直接存数据,减少内存申请次数,提升了cache命中率和内存访问速度。
zend_parse_parameters改为宏实现,性能提升5%
新增加4种OPCODE,call_user_function,is_int/string/array,strlen,defined 4个函数变为php OpCode指令,速度更快
其他更多性能优化,如基础类型int float bool 等改为直接进行拷贝,排序算法改进,PCRE with JIT,execute_data和opline进
行全局寄存器,使用gdb4.8的PGO功能

php7 安装

下载地址:
https://downloads.php.net/~ab/
下载解压后进入目录
./configure --prefix=/lnmp/php7 //或者加载更多模块./configure --prefix=/lnmp/php7 --with-mysql --with-gd --with-curl
make -j 4
make install

//php -m 查看安装了的模块
./configure --prefix=/lnmp/php7 --with-mysql --with-gd --with-curl --enable-fpm

然后 cd ~ 回到root 目录下

mkdir php

vim index.php

输入<?php phpinfo(); ?>

执行/lnmp/php7/bin/php -S 0.0.0.0:80

然后再通过你的服务器ip就可以访问了