美文网首页
PHP7.0 新特性

PHP7.0 新特性

作者: 画星星高手 | 来源:发表于2018-05-17 15:59 被阅读48次

变量类型

PHP7版本函数的参数和返回值增加了类型限定。
为什么PHP要加入类型呢?实际上此项特性是为了PHP7.1版本的JIT特性做准备,增加类型后PHP Jit可以准确判断变量类型,生成最佳的机器指令。
(针对密集运算的优化)

使用示例

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()}\n";
}

PHP7的性能优化

zval使用栈内存

在Zend引擎和扩展中,经常要创建一个PHP的变量,底层就是一个zval指针。
之前的版本都是通过MAKE_STD_ZVAL动态的从堆上分配一个zval内存,而PHP7可以直接使用栈内存。
好处:节省分配内存的花销

底层代码

//php5
zval *val;
MAKE_STD_ZVAL(val);

//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命中率和内存访问速度

在之前版本的PHP中,在array里每插入一个数据,就要申请一次内存,并且使内存存储在不同的内存页上,访问的时候命中率会降低。

zend_parse_parameters改为宏实现,性能提升5%

提升PHP扩展的性能

新增加4种OPCODE: call_user_function, is_int/string/array, strlen, defined 4个函数变为PHP OpCode指令,速度更快

其他更多性能优化

  • 基础类型int, float, bool等改为直接进行值拷贝
  • 排序算法改进
  • PCRE with Jit(正则表达式)
  • execute_dataopline使用全局寄存器
  • 使用gdb 4.8PGO功能

PHP7 Jit

PHP7.0-final版本不会携带Jit特性

Jit使Just in Time得缩写,表示运行时将指令转为二进制的机器码。
对于计算密集型的程序,Jit可以将PHP的OpCode直接转换为机器码,大幅提升性能。
PHP开发组自己重启Jit开发计划,预计PHP7.1版本会带有Jit特性

为什么PHP7.0没有Jit

Jit对于实际项目,如WordPress没有太大的性能提升

PHP内置开发测试服务器

cd ~/php
php -S 0.0.0.0:8080

即可以~/php为网站根目录启动服务器。

About


了解更多有趣的操作请关注我的微信公众号:DealiAxy
每一篇文章都在我的博客有收录:blog.deali.cn

相关文章

  • PHP7.0 新特性

    变量类型 PHP7版本函数的参数和返回值增加了类型限定。为什么PHP要加入类型呢?实际上此项特性是为了PHP7.1...

  • php7.1加密解密 openssl_encrypt 替代

    1 概况 php7.1发布后新特性吸引了不少PHPer,大家都在讨论新特性带来的好处与便利。但是从php7.0 升...

  • php7 新特性

    一、php7.0 新的特性 1 . 可以强制指定变量类型 ,可使用declare(strict_types = 1...

  • [PHP7.0-PHP7.2]的新特性和新变更

    php7发布已经升级到7.2.里面发生了很多的变化。本文整理php7.0至php7.2的新特性和一些变化。 参考资...

  • Centos,redhat利用yum源安装php7.0

    Centos安装php7.0及与mysql连接相关 步骤 1,添加php7.0源 2,查看php7.0源 3,安装...

  • PHP7.0新增加的特性

    ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用。用法: $a = $_GET['a'...

  • PHP7.0新增加的特性

    1. ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用。用法: $a = $_GET[...

  • PHP7.0新增加的特性

    1. ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用。用法: $a = $_GET[...

  • PHP7.0新增加的特性

    1. ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用。用法: $a = $_GET[...

  • PHP7.0新增加的特性

    1. ?? 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用。用法: $a = $_GET[...

网友评论

      本文标题:PHP7.0 新特性

      本文链接:https://www.haomeiwen.com/subject/phnbdftx.html