下位互換性のない変更点PHP コア$GLOBALS へのアクセス制限
$GLOBALS 配列へのアクセスに対し、
多くの制限が適用されるようになりました。
継承したメソッド内で static 変数を使うstatic 変数を使っているメソッドが継承された (但し、オーバーライドはされていない) 場合、継承されたメソッドは static 変数を親クラスのメソッドと共有するようになりました。
必須の引数の前に、デフォルト値を持つ引数を指定した場合必須の引数の前に、 デフォルト値を持つ引数 を指定した場合、 デフォルト値を持つ引数は常に必須の引数として扱われるようになりました。 これは、 名前付き引数 を使って関数を呼び出した場合でも同様です。 PHP 8.0.0 以降、かつ 8.1.0 より前のバージョンでは、 以下のコードは推奨されない警告を発生させていましたが、 呼び出しは成功していました。 PHP 8.1.0 以降では、 ArgumentCountError がスローされるようになっています。 位置を指定して呼び出した場合でも、同じエラーがスローされます。
上の例の PHP 8.0 での出力は、このようになります。: Deprecated: Required parameter container in example.php on line 3 Making a bowl of raspberry yogurt. 上の例の PHP 8.1 での出力は、このようになります。: Deprecated: Optional parameter $container declared before required parameter $flavour is implicitly treated as a required parameter in example.php on line 3 ArgumentCountError - makeyogurt(): Argument #1 ($container) not passed
但し、必須の引数の前であっても、
Null を許容する型 を指定するために、
引数にデフォルト値 内部クラスと戻り値の型の互換性ほとんどの final でない内部メソッドは、 それをオーバライドする際、 互換性がある戻り値の型を宣言することが必須になりました。 そうしない場合、継承が有効かを検証する際に、 推奨されない警告が発生するようになります。 PHP のバージョン間の互換性を保ちたいがために、 戻り値の型を宣言できない場合、 アトリビュート ReturnTypeWillChange を追加することで警告を抑止できます。 新しいキーワード
リソースからオブジェクトへの移行
いくつかの リソース が、object に移行しました。
is_resource
関数を使って戻り値をチェックしているコードは、
MySQLi
mysqli_fetch_fields
と
mysqli_fetch_field_direct は、
max_length を指定すると
常に
mysqli::connect は、
成功時に
デフォルトのエラー処理モードが、
"silent" から
"exceptions" に変更されました。
この変更の意味の詳細と、
どのようにこの属性を明示的に設定するかについては、
MySQLi のエラー報告モード
のページを参照ください。
以前のバージョンの振る舞いは、
mysqli_stmt::execute を継承したクラスは、 追加でオプションの引数を指定しなければいけません。 MySQLndINI ディレクティブ mysqlnd.fetch_data_copy が削除されました。 このディレクティブによって、 ユーザーの目に見える形で、振る舞いが変更されるべきではないからです。 OpenSSLEC キーの秘密鍵は、他のキーと同じように PKCS#8 フォーマットでエクスポートされるようになりました。 openssl_pkcs7_encrypt と openssl_cms_encrypt は、 デフォルト値が RC2-40 から AES-128-CBC に変更されました。 RC2-40 暗号はセキュアではないと見なされており、 OpenSSL 3 からはデフォルトで有効ではなくなっています。 PHP Data Objects(PDO)
PDOStatement::bindColumn
に
MySQL ドライバ
結果セットの整数と浮動小数点の値は、
エミュレートされたプリペアドステートメントを使った場合、
文字列ではなく、
ネイティブの PHP の型を使って返されるようになりました。
これは、ネイティブのプリペアドステートメントの振る舞いと一致します。
以前のバージョンの振る舞いは、
SQLite ドライバ
結果セットの整数と浮動小数点の値は、
ネイティブの PHP の型を使って返されるようになりました。
以前のバージョンの振る舞いは、
PharArrayAccess インターフェイスに準拠するため、 Phar::offsetUnset と、 PharData::offsetUnset は bool を返さなくなりました。 標準ライブラリversion_compare は、 ドキュメントに書かれていない演算子の省略形を受け入れなくなりました。
htmlspecialchars,
htmlentities,
htmlspecialchars_decode,
html_entity_decode,
get_html_translation_table のデフォルト値が、
debug_zval_dump は、
値の前に
debug_zval_dump は、
インターン化された文字列や、
変更できない配列については、
ダミーのリファレンスカウントではなく、
Standard PHP Library (SPL)SplFixedArray は、 array のように JSON にエンコードできるようになりました。 |