美文网首页PHP
PHP7的一些特性

PHP7的一些特性

作者: Gundy_ | 来源:发表于2016-12-01 15:29 被阅读19次

    运算符(NULL 合并运算符)

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

    函数返回值类型声明

    <php 
    function arraysSum(array ...$arrays): array 
    { 
        return array_map(function(array $array): int { 
            return array_sum($array); 
        }, $arrays); 
    } 
     
    print_r(arraysSum([1,2,3], [4,5,6], [7,8,9])); 
    

    标量类型声明

    <php 
    // Coercive mode 
    function sumOfInts(int ...$ints) 
    { 
        return array_sum($ints); 
    } 
     
    var_dump(sumOfInts(2, '3', 4.1)); 
    

    use 批量声明

    <php 
    use some/namespace/{ClassA, ClassB, ClassC as C}; 
    use function some/namespace/{fn_a, fn_b, fn_c}; 
    use const some/namespace/{ConstA, ConstB, ConstC}; 
    

    新增的几个操作符

    //<=> - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】
    echo 1 <=> 2;//-1
    echo 1 <=> 1;//0
    echo 1 <=> 0;//1
     
    // ** - 【a的b次方】
    echo 2 ** 3;//8
     
    //?? - 三元运算符的改进
    //php5
    $_GET['name'] ? $_GET['name'] : '';//Notice: Undefined index: …
    //php7
    $_GET['name'] ?? '' -> '';
     
    //\u{xxxx} - Unicode字符的解析
    echo "\u{4f60}";//你
    echo "\u{65b0}";//新
    

    foreach循环的改进

    //PHP5
    $a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a));}
    int(2)
    int(2)
    int(2)
     
    $a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a));}
    int(2)
    int(3)
    bool(false)
     
    $a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a));}
    int(1)
    int(1)
    int(1)
     
    //PHP7:不再操作数据的内部指针了
    $a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a))}
    int(1)
    int(1)
    int(1)
     
    $a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a))
    int(1)
    int(1)
    int(1)
     
    $a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a))}
    int(1)
    int(1)
    int(1)
    

    使用新的Zend Array替换之前的HashTale结构

    我们php程序中使用最多、最有用、最方便、最灵活的就是数组了,而php5它的底层就是HashTable实现的,php7使用了新的Zend Array类型,性能和访问速度上都有了大幅度提升!一些非常常用,开销不大的的函数直接变成了引擎支持的opcode

    使用了新的内存分配,管理方式,减少了内存的浪费核心排序zend_sort的优化

    //PHP5 - 快速排序(非稳定排序)
    array(1 => 0, 0 => 0)
    //PHP7 - 快速排序+选择排序(稳定排序)
    array(0 => 0, 1 => 0)
    

    小于16个元素的使用选择排序,大于16个按照16个为单位去分割,分别使用选择排序,然后再全部合起来使用快速排序。排序较之前相比,内部元素由非稳定排序变成稳定排序,减少元素的交换次数,减少对内存的操作次数,性能提升40%

    • ZEND引擎升级到Zend Engine 3,也就是所谓的PHP NG
    • 增加抽象语法树,使编译更加科学
    • 64位的INT支持
    • 统一的变量语法
    • 原声的TLS - 对扩展开发有意义
    • 一致性foreach循环的改进
    • 新增 <=>、**、?? 、\u{xxxx}操作符
    • 增加了返回类型的声明
    • 增加了标量类型的声明
    • 核心错误可以通过异常捕获了
    • 增加了上下文敏感的词法分析

    相关文章

      网友评论

        本文标题:PHP7的一些特性

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