PHP 8.5.0 RC4 available for testing

PHP 8.5.x で推奨されなくなる機能

PHP コア

ユーザー定義の出力ハンドラに関する変更

ユーザー定義の出力ハンドラから文字列でない値を返すことは、 推奨されなくなりました。 この推奨されない警告が表示されることを保証するため、 不正な戻り値を持つハンドラはバイパスされます。 つまり、ネストされた出力ハンドラが存在する場合、 次のハンドラは引き続き使われるということです。

ユーザー定義の出力ハンドラから(たとえば echo などを使って) 出力を行うことは、推奨されなくなりました。 この推奨されない警告は、 出力を生成するハンドラをバイパスして、 それが確実に表示されるようにします。 つまり、ネストされた出力ハンドラが存在する場合、 次のハンドラは引き続き使われるということです。 ユーザー定義の出力ハンドラが文字列でない値を返し、 かつ出力を生成する場合、出力を行ったことに関する警告が最初に発生します。

正規化されていない型名でのキャスト

正規化されていない型名 (boolean), (integer), (double), (binary) でキャストすることは、 推奨されなくなりました。 (bool), (int), (float), (string) をそれぞれ使ってください。

セミコロンでcase文を終了させる

case文をコロンではなく、セミコロンで終了させることは、 推奨されなくなりました。

バッククォート演算子

shell_exec() のエイリアスとして使われている バッククォート演算子 は、推奨されなくなりました。

__debugInfo() から null を返す

__debugInfo() から null を返すことは、推奨されなくなりました。 空の配列を返してください。

report_memleaks INI ディレクティブ

INI ディレクティブ report_memleaks は、 推奨されなくなりました。

定数の再宣言

同じ定数を再宣言することは、推奨されなくなりました。 これについては既に警告は発生しており、 (警告の種類が変わるだけで)それが続くことに注意してください。

クロージャのバインド時の問題

既に E_WARNING が発生している、 クロージャのバインド時の以下の問題は、推奨されなくなりました:

  • インスタンスを static なクロージャにバインドすること
  • メソッドが定義されているクラス(またはサブクラス)のインスタンスでないオブジェクトに、メソッドをバインドすること
  • メソッドから $this のバインドを解除すること
  • `$this` を使っているクロージャから、$this のバインドを解除すること
  • 内部クラスのスコープにクロージャをバインドすること
  • 関数やメソッドから生成したクロージャのスコープを、再度バインドすること

マジックメソッド __sleep() と __wakeup()

マジックメソッド __sleep()__wakeup() は、 soft-deprecated 扱いになりました。 代わりに、__serialize()__unserialize() を使ってください。 PHP 7 との互換性が必要な場合は、両方を同時に使ってください。

配列のオフセットに null を指定

配列のオフセットに null を指定したり、 array_key_exists() をコールする際に null を指定することは、 推奨されなくなりました。 代わりに、空文字列を使ってください。

数値でない文字列をインクリメント

数値でない文字列をインクリメントすることは、推奨されなくなりました。 str_increment() を代わりに使ってください。

register_argc_argv INI ディレクティブ

CLI でない SAPI において、 クエリ文字列から $_SERVER['argc']$_SERVER['argv'] の値を取得する機能は、 推奨されなくなりました。 安全な使い方を検証した上で register_argc_argv=0 を設定し、情報を取得する手段を $_GET$_SERVER['QUERY_STRING'] に切り替えてください。

cURL

curl_close() 関数は、推奨されなくなりました。 CurlHandle オブジェクトが、 自動でリソースを開放するためです。

curl_share_close() 関数は、推奨されなくなりました。 CurlShareHandle オブジェクトが、 自動でリソースを開放するためです。

Date

定数 DATE_RFC7231DateTimeInterface::RFC7231 は、推奨されなくなりました。 これらに関連付けられているタイムゾーンは無視され、 常に GMT を使っているためです。

FileInfo

finfo_close() 関数は、推奨されなくなりました。 finfo オブジェクトが、 自動でリソースを開放するためです。

finfo_buffer() 関数の $context パラメータは、推奨されなくなりました。 このパラメータは無視されているためです。

GD

imagedestroy() 関数は、推奨されなくなりました。 GdImage オブジェクトが、 自動でリソースを開放するためです。

Hash

MHASH_* 定数は、 推奨されなくなりました。

Intl

INI ディレクティブ intl.error_level は、 推奨されなくなりました。 エラーは手動でチェックするか、 INI ディレクティブ intl.use_exceptions を使って例外を有効にすべきです。

LDAP

特定の Oracle Instant Client の呼び出しや定数は、 推奨されなくなりました。 影響を受ける呼び出しは以下の通りです:

影響を受ける定数は以下の通りです:
  • GSLC_SSL_NO_UATH
  • GSLC_SSL_ONEWAY_UATH
  • GSLC_SSL_TWOWAY_UATH

MySQLi

エイリアスとして定義されている mysqli_execute() 関数は、 推奨されなくなりました。 代わりに mysqli_stmt_execute() を使いましょう。

OpenSSL

openssl_pkey_derive()$key_length パラメータは、推奨されなくなりました。 このパラメータは無視されているか、キーを切り捨てるかしており、 それらの挙動がセキュリティ上の脆弱性になりうるためです。

PDO

"uri:" DSN スキームは、推奨されなくなりました。 リモートURI から生じる、DSN に関するセキュリティ上の懸念があるためです。

PDO クラスのドライバ特有の定数は、推奨されなくなりました。 影響を受ける定数と、代替は以下のとおりです:

PDO クラスのドライバ特有のメソッドは、推奨されなくなりました。 影響を受けるメソッドと、代替は以下のとおりです:

PDO_PGSQL

トランザクションの状態に関連する以下の定数は、推奨されなくなりました。 この機能は PDO で利用できなくなっているからです:

  • PDO::PGSQL_TRANSACTION_IDLE
  • PDO::PGSQL_TRANSACTION_ACTIVE
  • PDO::PGSQL_TRANSACTION_INTRANS
  • PDO::PGSQL_TRANSACTION_INERROR
  • PDO::PGSQL_TRANSACTION_UNKNOWN

Reflection

リフレクション関連の様々な setAccessible() メソッドは、 推奨されなくなりました。 使っても効果がないためです。

存在しない定数に対して、 ReflectionClass::getConstant() をコールすることは、推奨されなくなりました。

デフォルト値が存在しないプロパティに対して、 ReflectionProperty::getDefaultValue() をコールすることは、推奨されなくなりました。

SPL

spl_autoload_call()spl_autoload_unregister() のコールバック引数に渡すことで、 すべての autoload の登録を解除することは、推奨されなくなりました。 代わりに、spl_autoload_functions() の戻り値を反復処理し、 それぞれの値に対して spl_autoload_unregister() をコールする必要があります。

SplObjectStorage::contains(), SplObjectStorage::attach(), SplObjectStorage::detach() は、推奨されなくなりました。 SplObjectStorage::offsetExists(), SplObjectStorage::offsetSet(), SplObjectStorage::offsetUnset() をそれぞれ使ってください。

オブジェクトと一緒に ArrayObjectArrayIterator を使うことは、 推奨されなくなりました。

Standard

エイリアスとして定義されている socket_set_timeout() 関数は、 推奨されなくなりました。 代わりに stream_set_timeout() を使いましょう。

最後にオープンしたディレクトリを使う目的で、 readdir(), rewinddir(), closedir()null を渡すことは、 推奨されなくなりました。 最後にオープンしたディレクトリを明示的に指定してください。

chr() に、 区間 [0, 255] の範囲にない数値を指定することは、 推奨されなくなりました。 1バイトのデータは、この範囲でのみ保持できるからです。

シングルバイトでない文字列を ord() に渡すことは、 推奨されなくなりました。 こうすることは、バグであることを示唆しています。

ローカルで事前に定義済みの変数 $http_response_header は、推奨されなくなりました。代わりに、 http_get_last_response_headers() をコールすべきです。

XML

xml_parser_free() 関数は、推奨されなくなりました。 XMLParser オブジェクトが、 自動でリソースを開放するためです。

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top