下位互換性のない変更点
PHP コア
fn
キーワード
fn
は、予約語になりました。特に、関数名やクラス名として使うことはできなくなりました。メソッド名やクラスの定数名の場合は使用できます。
ファイルの最後の <?php
タグ
ファイルの最後の (改行が最後に付かない) <?php
タグは、PHPタグの開始タグとして解釈されるようになりました。以前は、短い形式の開始タグ <?
の後にリテラル
php
を続けたものとして解釈されるか、(short_open_tag=1
の場合は) 文法エラー になるか、(short_open_tag=0
の場合は) <?php
というリテラルとして解釈されていました。
シリアル化
シリアル化フォーマット o
は削除されました。
PHP
によって生成されなくなるので、手動で組まれた文字列のシリアル化を復元する場合のみ、壊れる場合があります。
パスワードアルゴリズムの定数
パスワードハッシュのアルゴリズムの識別子は、数値型ではなく、nullable
な文字列型になりました。
-
PASSWORD_DEFAULT
は int型の 1 でしたが、
string の '2y' になりました。
(PHP 7.4.0, 7.4.1, 7.4.2 では null
でした)
-
PASSWORD_BCRYPT
は int型の 1 でしたが、string の
'2y' になりました。
-
PASSWORD_ARGON2I
は int型の 2 でしたが、string の
'argon2i' になりました。
-
PASSWORD_ARGON2ID
は int型の 3 でしたが、string の
'argon2id' になりました。
PASSWORD_DEFAULT,
PASSWORD_BCRYPT, PASSWORD_ARGON2I, および PASSWORD_ARGON2ID
定数を正しく使っているアプリケーションは、正しく動作し続けるはずです。
fread() と fwrite()
関数は、操作に失敗した場合に false
を返すようになりました。以前は空文字列か 0
を返していました。EAGAIN/EWOULDBLOCK は、失敗と見做されません。
これらの関数は、読み取り専用のリソースに書き込もうとして失敗したような場合に E_NOTICE を発生させるようになりました。
BCMath
BCMath 関数は、"32foo"
のような不完全な数値が渡された場合に警告を生成するようになりました。以前はそうした引数は0として解釈されていました。
CURL
CURLFile
をシリアル化しようとすると、例外が発生するようになりました。以前は、シリアル化を復元しようとした場合のみ、例外が発生していました。
CURLPIPE_HTTP1
は非推奨になり、cURL 7.62.0
からサポートされなくなりました。
curl_version() 関数の $version
引数は推奨されません。デフォルトの
CURLVERSION_NOW
以外の値が渡された場合、警告が生成され、渡された引数は無視されます。
MySQLi
組み込みサーバーの機能は削除されました。少なくとも PHP 7.0
以降、この機能は壊れていました。
ドキュメントに書かれていない mysqli::$stat
プロパティは削除され、mysqli::stat()
に置き換えられました。
Regular Expressions (Perl互換)
PREG_UNMATCHED_AS_NULL
モードが使われた場合、後に続くマッチしなかったキャプチャグループにも null
(offset キャプチャが有効になっていた場合は
[null, -1]
になります) が設定されるようになりました。
これは、$matches
のサイズが常に同じになることを意味します。
リフレクション
リフレクションオブジェクトをシリアル化しようとすると、例外を生成するようになりました。リフレクションオブジェクトのシリアル化はこれまでサポートされたことはなく、壊れたリフレクションオブジェクトを返していました。このバージョンから、明示的に禁止されました。
Tokenizer
token_get_all()
関数は、トークンストリームに穴を開けるのではなく、T_BAD_CHARACTER
トークンを生成するようになりました。
外部から入力されるCookie
PHP 7.4.11 以降は、セキュリティ上の理由により、
外部から入力される Cookie の
名前 はurlデコードされなくなりました。