PHP 8.4.1 Released!

その他の変更

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

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

add a note

User Contributed Notes 1 note

up
18
Ta7To7
6 years ago
Note that using Incrementing/Decrementing operators on string is legal
<?php
$str
= "";
echo ++
$str; // output: 1
?>
To Top