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

PHP コア

暗黙的な nullable パラメータ

パラメータのデフォルト値が null の場合、 その型は暗黙的に null を受け入れるように拡張されます。

次のコードは:

<?php
function foo(T1 $a = null) {}
このように:
<?php
function foo(T1|null $a = null) {}
またはこのように修正する必要があります。
<?php
function foo(?T1 $a = null) {}

しかし、そのようなパラメータ宣言の後に必須パラメータが続く場合:

<?php
function foo(T1 $a, T2 $b = null, T3 $c) {}
このように:
<?php
function foo(T1 $a, T2|null $b, T3 $c) {}
またはこのように修正する必要があります。
<?php
function foo(T1 $a, ?T2 $b, T3 $c) {}
なぜなら、必須パラメータの前に任意パラメータを置くことは非推奨だからです。

ゼロを負の数でべき乗

ある数の負のべき乗は、 その数の正のべき乗の逆数と同等です。 例えば、10-21 / 102 と同等です。 つまり、0の負のべき乗は 0 で割ることを意味します。例えば、 0-21 / 02、または 1 / 0 となります。以上より、この動作は非推奨とされました。

これはべき乗演算子 **pow 関数に影響します。

IEEE 754 のセマンティクスが必要な場合は、新しい fpow 関数を使用してください。

クラス名をアンダースコア _ とする

クラス名を _ とすることは、現在非推奨となっています:

<?php
class _ {}

注意:

クラス名がアンダースコアで始まるのは、 非推奨ではありません:

<?php
class _MyClass {}

trigger_errorE_USER_ERROR を使用

trigger_errorerror_level として E_USER_ERROR を指定するのは非推奨となりました。

そのような場合、例外をスローするか、 exit を呼び出すように修正すべきです。

E_STRICT 定数

E_STRICT エラーレベルが削除されたため、 この定数は非推奨となりました。

cURL

CURLOPT_BINARYTRANSFER 定数は非推奨となりました。

Date

DatePeriod::__construct(string $isostr, int $options = 0) の シグネチャは非推奨となりました。 代わりに DatePeriod::createFromISO8601String を使用してください。

SUNFUNCS_RET_TIMESTAMPSUNFUNCS_RET_STRING、 および SUNFUNCS_RET_DOUBLE 定数は非推奨となりました。 これは PHP 8.1.0 で date_sunsetdate_sunrise 関数が非推奨となったことに伴うものです。

DBA

dba_key_splitnull または false を渡すことは 非推奨となりました。 これらの場合、常に false を返していました。

DOM

DOM_PHP_ERR 定数は非推奨となりました。

以下のプロパティは正式に非推奨となりました:

  • DOMDocument::$actualEncoding
  • DOMDocument::$config
  • DOMEntity::$actualEncoding
  • DOMEntity::$encoding
  • DOMEntity::$version

Hash

ハッシュ関数に無効なオプションを渡すことは非推奨となりました。

Intl

intlcal_set または IntlCalendar::set を 2 つを超える引数で呼び出すことは非推奨となりました。 代わりに IntlCalendar::setDate または IntlCalendar::setDateTime を使用してください。

intlgregcal_create_instance または IntlGregorianCalendar::__construct を 2 つを超える引数で呼び出すことは非推奨となりました。 代わりに IntlGregorianCalendar::createFromDate または IntlGregorianCalendar::createFromDateTime を使用してください。

LDAP

ldap_connect を 2 つを超える引数で呼び出すことは非推奨となりました。 代わりに ldap_connect_wallet を使用してください。

ldap_exop を 4 つを超える引数で呼び出すことは非推奨となりました。 代わりに ldap_exop_sync を使用してください。

MySQLi

mysqli_ping 関数および mysqli::ping メソッドは、 PHP 8.2.0 で再接続機能が削除されたため、非推奨となりました。

mysqli_kill 関数および mysqli::kill メソッド は非推奨となりました。 この機能が必要な場合は、代わりに SQL の KILL コマンドを使用できます。

mysqli_refresh 関数および mysqli::refresh メソッドは 非推奨となりました。 この機能が必要な場合は、代わりに SQL の FLUSH コマンド を使用できます。 すべての MYSQLI_REFRESH_* 定数も非推奨となりました。

mysqli_store_resultmode パラメータを明示的に渡すことは非推奨となりました。 この関数のために用意されていたMYSQLI_STORE_RESULT_COPY_DATA 定数も 非推奨となりました。

PDO_PGSQL

ドル記号で囲まれた文字列の中で エスケープされた疑問符(??)を使用することは非推奨となりました。 PDO_PGSQL はドル記号で囲まれた文字列をサポートする独自の SQL パーサーを持つようになったため、 それらの中で疑問符をエスケープする必要はなくなりました。

PGSQL

pg_fetch_resultpg_field_prtlen、 および pg_field_is_null の 2 引数のシグネチャは非推奨となりました。 代わりに rownull に設定した 3 引数のシグネチャを 使用してください。

Random

lcg_value は非推奨となりました。 この関数は複数の点で問題があるためです。 代わりに Random\Randomizer::getFloat を使用してください。

Reflection

ReflectionMethod::__construct を 1 つの引数で呼び出すことは非推奨となりました。 代わりに ReflectionMethod::createFromMethodName を使用してください。

Session

session_set_save_handler を 2 つを超える引数で呼び出すことは非推奨となりました。 2 引数のシグネチャを使用してください。

session.sid_length および session.sid_bits_per_character の INI 設定値を変更することは非推奨となりました。 セッションストレージバックエンドを修正し、 16 進数 32 文字による セッション ID を受け入れるようにし、これら 2 つの INI 設定を変更するのをやめてください。

session.use_only_cookiessession.use_trans_sidsession.trans_sid_tagssession.trans_sid_hosts、および session.referer_check の INI 設定値を変更することは非推奨となりました。 SID 定数も非推奨となりました。

SOAP

SoapServer::addFunctionint を渡すことは非推奨となりました。 すべての PHP 関数を提供する必要がある場合は、 get_defined_functions が返す配列をフラット化してください。

SOAP_FUNCTIONS_ALL 定数は非推奨となりました。

SPL

SplFixedArray::__wakeup メソッドは 非推奨となりました。代わりに SplFixedArray::__serializeSplFixedArray::__unserialize をオーバーライドしてください。

SplFileObject::setCsvControlSplFileObject::fputcsv、および SplFileObject::fgetcsvescape パラメータのデフォルト値を利用することは非推奨となりました。 引数または名前付き引数で明示的に指定する必要があります。 これは、 SplFileObject::setCsvControl で 新しいデフォルト値を設定した場合、 SplFileObject::fputcsv および SplFileObject::fgetcsv には適用されません。

Standard

stream_context_set_option を 2 つの引数で呼び出すことは非推奨となりました。 代わりに stream_context_set_options を使用してください。

unserialize で大文字の S タグを使用して文字列を アンシリアライズすることは非推奨となりました。

fputcsvfgetcsv、および str_getcsvescape パラメータのデフォルト値を利用することは非推奨となりました。 引数または名前付き引数で明示的に指定する必要があります。

XML

xml_set_object 関数は非推奨となりました。

callable でない文字列を xml_set_* 関数に渡すことは非推奨となりました。