## 新特性

### 新的对象类型

这种新的对象类型, object, 引进了可用于逆变（contravariant）参数输入和协变（covariant）返回任何对象类型。

    <?php

    function test(object $obj) : object
    {
        return new SplQueue();
    }

    test(new stdClass());

### 通过名称加载扩展

扩展文件不再需要通过文件加载 (Unix下以`.so`为文件扩展名，在Windows下以 `.dll` 为文件扩展名) 进行指定。可以在php.ini配置文件进行启用, 也可以使用 dl() 函数进行启用。

### 重写抽象方法（Abstract method）

当一个抽象类继承于另外一个抽象类的时候，继承后的抽象类可以重写被继承的抽象类的抽象方法。

    <?php

    abstract class A
    {
        abstract function test(string $s);
    }
    abstract class B extends A
    {
        // 被覆盖 - 仍然保持参数的逆变和返回的逆变
        abstract function test($s) : int;
    }

### Sodium 现在是核心扩展

现代 Sodium 加密类已经成为 PHP 核心扩展。

参阅 Sodium 章节获取完整函数参考。

### 使用 Argon2 算法生成密码散列

Argon2 已经加入到密码散列 API, 以下是显露出来的常量:

- `PASSWORD_ARGON2I`
- `PASSWORD_ARGON2_DEFAULT_MEMORY_COST`
- `PASSWORD_ARGON2_DEFAULT_TIME_COST`
- `PASSWORD_ARGON2_DEFAULT_THREADS`

### 新增 PDO 字符串扩展类型

当你准备支持多语言字符集，PDO的字符串类型已经扩展支持国际化的字符集。以下是扩展的常量：

- `PDO::PARAM_STR_NATL`
- `PDO::PARAM_STR_CHAR`
- `PDO::ATTR_DEFAULT_STR_PARAM`

这些常量通过`PDO::PARAM_STR`利用位运算`OR`进行计算：

    <?php

    $db->quote('über', PDO::PARAM_STR | PDO::PARAM_STR_NATL);

### 为 PDO 新增额外的模拟调试信息

PDOStatement::debugDumpParams()方法已经更新，当发送SQL到数据库的时候，在一致性、行查询（包括替换绑定占位符）将会显示调试信息。这一特性已经加入到模拟调试中（在模拟调试打开时可用）。

### LDAP 支持新的操作方式

LDAP 扩展已经新增了EXOP支持. 扩展暴露以下函数和常量:

- ldap_parse_exop()
- ldap_exop()
- ldap_exop_passwd()
- ldap_exop_whoami()
- `LDAP_EXOP_START_TLS`
- `LDAP_EXOP_MODIFY_PASSWD`
- `LDAP_EXOP_REFRESH`
- `LDAP_EXOP_WHO_AM_I`
- `LDAP_EXOP_TURN`

### Socket 扩展添加了地址信息

Socket 扩展现在具有查找地址信息的能力，且可以连接到这个地址，或者进行绑定和解析。为此添加了以下一些函数:

- socket_addrinfo_lookup()
- socket_addrinfo_connect()
- socket_addrinfo_bind()
- socket_addrinfo_explain()

### 扩展了参数类型

重写方法和接口实现的参数类型现在可以省略了。不过这仍然是符合LSP，因为现在这种参数类型是逆变的。

    <?php

    interface A
    {
        public function Test(array $input);
    }

    class B implements A
    {
        public function Test($input){} // $input 忽略类型
    }

### 允许分组命名空间的尾部逗号

命名空间可以在PHP 7中使用尾随逗号进行分组引入。

    <?php

    use Foo\Bar\{
        Foo,
        Bar,
        Baz,
    };

### proc_nice() 现在支持 Windows

proc_nice() 函数现在支持 Windows。

### pack() 和 unpack() 字节序支持

pack() 和 unpack() 函数现在 float 和 double 都支持大小端。

### EXIF 扩展增强

EXIF 扩展已更新以支持更多的格式。这意味着使用 exif_read_data() 函数解析图片时，现在可以正确转换图片格式的特定标签。现在支持下面这些新格式：

- Samsung
- DJI
- Panasonic
- Sony
- Pentax
- Minolta
- Sigma/Foveon
- AGFA
- Kyocera
- Ricoh
- Epson

EXIF 函数 exif_read_data() 和 exif_thumbnail() 现在支持传递流作为它们的第一个参数。

### PCRE 新功能

- PCRE_DUPNAMES 设置新增 `J` 修饰符。

### SQLite3 允许写入 BLOB

SQLite3::openBlob() 现在允许在写入模式打开 BLOB 字段，以前仅支持读模式。

### Oracle OCI8 透明应用程序故障转移回调

新增 Oracle 数据库透明应用程序故障转移（TAF）回调的支持。 TAF 允许 PHP OCI8 应用程序在断开链接时自动重新连接到预配置的数据库。新的 TAF 回调支持允许 PHP 应用程序在故障转移期间的监控和控制重新连接。

### ZIP 扩展增强

新增加密归档读写支持（需要 libzip 1.2.0）。

现在 ZipArchive 类实现了 Countable 接口。

`zip://` 流现在接受 `'password'` 上下文选项。

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open