## その他の変更

### 無効な文字列による算術演算の通知

数値形式ではない文字列を使って、数値を期待する演算 (`+` `-` `*` `/` `**` `%` `<<` `>>` `|` `&` `^` や、これらを用いた代入演算) を行おうとしたときに、 `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

### 八進表記のオーバーフロー時の警告

これまでのバージョンでは、八進表記のエスケープシーケンスがオーバーフローを起こしても、 警告は発生しませんでした。 PHP 7.1 以降では、この場合に `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 をユーザー定義の変数名として使ったり他の値を再代入したり、 グローバル変数にしたりすることはできなくなりました。

### ハッシュなしでのセッション ID の生成

セッション 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 モードの 0 が使われます。 デフォルト値は 14 のままです。

`serialize_precision`

  この値を -1 に設定すると、dtoa モードの 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 (無効) に戻されました。

### セッションIDの生成は、CSPRNGのみから行われる

セッションID は、CSPRNG のみから生成されるようになりました。

### `null` が許可されていた場合の TypeError メッセージがよりわかりやすく

arg_info 型をチェックする際の TypeError 例外 が、よりわかりやすいエラーメッセージを出力するようになりました。 引数の型や戻り値の型が `null` を許可していた場合 (デフォルト値が `null` だった場合や、nullable 型だった場合)、 エラーメッセージはそのことを "must be ... or null" や "must ... or be null." といった形で示すようになりました。

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