• php7的性能有极大的提升。

  • 太空串操作符<=>用于比较两个表达式,例如当a分别小于丶等于丶大于b时分别会返回-1,0,1

  • 类型提示, 通过使用declare(strict_types=1); , strict_types=1表示开启严格模式,当传入的参数类型不合法时会报错。

  • null合并操作符: ??, php7前使用三元表达式来判断一个值是否为null来返回不同的值,如:`_GET['page']) ? page = isset($_GET['page']) ?? 1;`。

  • 常量数组, 通过define('NUMS', [1, 2, 3]);定义常量数组,该数组是不可以被修改的。

  • NameSpace批量导入, php7前导入命名空间需要一行一个,如:

use Encore\Admin\Auth\Database\Administrator;
use Encore\Admin\Auth\Database\Menu;
use Encore\Admin\Auth\Database\Role;
use Encore\Admin\Auth\Database\Permission;

php7使用一行代码即可,节省了代码量。use Encore\Admin\Auth\Database\{Administrator, Menu, Role, Permission};

  • throwable接口, 例如该段代码:
try {
    underfindfunc();
}catch (Error $e){
    var_dump($e);
}

在php5中catch无法捕获, 在php7中可以捕获, 还可以通过set_exception_handle()进行捕获:

// 通过此函数也可以捕获
set_exception_handler(
    function ($e) {
        var_dump($e);
    }
);

underfindfunc();
  • Closure::call(), 通过闭包函数可操作类私有变量, 例如:
<?php

class Person {
    private $age = 10;
}

$f = function () {
    $this->age = 20;
    return $this->age;
};

echo $f->call(new Person()); // 输出20
  • intdiv 整除函数, 在php5中整除需要进行转int,如:`num = intdiv(10, 3);`。

  • list的方括号写法, php5中list:

$arr = [1,2,3];
list($a, $b, $c) = $arr;

php7(php7.1之后)中可简化为:

$arr = [1,2,3];
[$a, $b, $c] = $arr;
  • 匿名类, php7中可以通过new class来创建匿名类对象, 如:
$obj = new class {
  public $num = 10;
};

echo $obj->num;
  • 为 unserialize() 提供过滤的特性,可以防止非法数据进行代码注入,提供了更安全的反序列化数据。

  • IntlChar, 这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。

  • random_bytes() - 加密生生成被保护的伪随机字符串, random_int() - 加密生成被保护的伪随机整数。

  • session_start() 函数可以接收一个数组作为参数,可以覆盖 php.ini 中 session 的配置项。

  • 移除扩展:ereg,mssql,mysql,sybase_ct