php7.4新特性

截至2019年10月,php7.4已经发布了几个预览版本,根据发布计划,预计正式版将于12月左右发布。一起看看,php7.4都有哪些变化。

安装教程

  1. Centos 7 安装PHP7.4 + Nginx + MySQL
  2. 基于Ubuntu安装PHP7.4 + Nginx + MySQL

新特性

  • 支持定义类属性的类型,例如:

    1
    2
    3
    4
    class User {
    public int $id;
    public string $name;
    }

    以上声明将强制id只能赋值为整数类型,name属性只能赋值为字符串类型。

  • 增加对箭头函数的支持

    1
    2
    $factor = 10;
    $nums = array_map(fn($num) => $num * $factor, $nums);

    以上代码相当于:

    1
    2
    3
    4
    $factor = 10;
    $nums = array_map(function($num) use($factor){
    return $num * $factor;
    }, $nums);

    注意:箭头函数语法包含fn,所以fn已经变成关键字。意味着不能将fn作为函数名和类名。

  • 增加空值合并赋值运算符 “??=

    1
    2
    3
    4
    5
    $array['key'] ??= computeDefault();
    // 与以下代码等效
    if (!isset($array['key'])) {
    $array['key'] = computeDefault();
    }
  • 新增数组内部解包语法“

    1
    2
    3
    4
    5
    $arr1 = [1, 2, 3];
    $arr2 = [...$arr1]; //[1, 2, 3]
    $arr3 = [0, ...$arr1]; //[0, 1, 2, 3]
    $arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111]
    $arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3]
  • 支持在数字中增加下划线,以提高代码可读性:

    1
    2
    3
    $num = 1_000_000_000;   // 10亿
    $num = 1_0000_0000; // 1亿
    $discount = 135_00; // 135元(以分为单位)
  • OPcache支持代码预加载
    支持将函数、类加载到内存中,后续每个请求都可以直接调用这些函数和类,可以有效地提高性能。
    更详细的信息查看PHP RFC: Preloading

  • 支持在__toString中抛出异常
    在以前的版本中,在__toString中抛出异常将会报PHP Fatal error。从7.4开始,将支持在__toString中抛出异常。

参考文档

  1. PHP 7.4 UPGRADE NOTES