## 其它变更

### 无效字符串计算的通知和警告

当对无效字符串使用期望数字的操作符（`+` `-` `*` `/` `**` `%` `<<` `>>` `|` `&` `^`）或者其赋值等效项（assignment equivalents）进行强制转换时，已引入新的 `E_WARNING` 和 `E_NOTICE` 错误。当字符串以数字开头但后跟非数字字符时，会发出 `E_NOTICE`；当字符串不包含数字值时，会发出 `E_WARNING`。

    <?php
    '1b' + 'something';

以上示例会输出：

    Notice: A non well formed numeric value encountered in %s on line %d
    Warning: A non-numeric value encountered in %s on line %d

### 八进制转义序列溢出时发出警告

以前，3 字节的八进制字符串转义序列会默默溢出。现在，仍然会溢出，但会发出 `E_WARNING` 警告。

    <?php
    var_dump("\500");

以上示例会输出：

    Warning: Octal escape sequence overflow \500 is greater than \377 in %s on line %d
    string(1) "@"

### `$this` 不一致的修正

虽然在 PHP 中将 `$this` 视为特殊变量，但它缺乏适当的检查来确保不会用作变量名或重新分配。现在已对此进行纠正，以确保 `$this` 不能是用户定义的变量、重新分配给不同的值或全局化。

### 无需散列即可生成 Session ID

Session ID 将不再在生成时进行哈希。这一变化，会导致以下四个 ini 设置不再使用：

- `session.entropy_file`
- `session.entropy_length`
- `session.hash_function`
- `session.hash_bits_per_character`

并增加以下两个 ini 设置：

- `session.sid_length` - 定义会话 ID 的长度（为了向后兼容，默认为 32 个字符）
- `session.sid_bits_per_character` - 定义了每个字符的存储位数（即增加了会话 ID 中可使用的字符范围），为了向后兼容，默认为 4

### INI 文件处理的变化

`precision`

  如果该值设置为 -1，则使用 dtoa mode 0。默认值仍然是 14。

`serialize_precision`

  如果该值设置为 -1，则使用 dtoa mode 0。现在默认值使用 -1。

`gd.jpeg_ignore_warning`

  此 php.ini 设置的默认值已更改为 1，因此默认情况下将忽略 libjpeg 警告。

`opcache.enable_cli`

  此 php.ini 设置的默认值已在 PHP 7.1.2 中更改为 1（启用），并在 PHP 7.1.7 中更改回 0（禁用）。

### 仅使用 CSPRNG 生成会话 ID

现在只能使用 CSPRNG 生成会话 ID。

### 当允许 null 时提供更多信息的 TypeError 消息

arg_info 类型检查的 TypeError 异常现在将提供更多有用的错误消息。如果参数类型或返回类型接受 `null`（通过具有默认值 `null` 或可为 `null` 的类型），则错误消息现在将通过消息“must be ... or null”或“must ... or be null.”提及这一点。

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