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-2
は
1 / 102
と同等です。
つまり、0
の負のべき乗は
0
で割ることを意味します。例えば、
0-2
は
1 / 02
、または
1 / 0
となります。以上より、この動作は非推奨とされました。
これはべき乗演算子 **
と
pow() 関数に影響します。
IEEE 754 のセマンティクスが必要な場合は、新しい fpow() 関数を使用してください。
クラス名をアンダースコア _
とする
クラス名を _
とすることは、現在非推奨となっています:
<?php
class _ {}
注意:
クラス名がアンダースコアで始まるのは、 非推奨ではありません:
<?php
class _MyClass {}
trigger_error() で
E_USER_ERROR
を使用
trigger_error() で
error_level
として
E_USER_ERROR
を指定するのは非推奨となりました。
そのような場合、例外をスローするか、 exit() を呼び出すように修正すべきです。
cURL
CURLOPT_BINARYTRANSFER
定数は非推奨となりました。
Date
DatePeriod::__construct(string $isostr, int $options = 0)
の
シグネチャは非推奨となりました。
代わりに DatePeriod::createFromISO8601String() を使用してください。
SUNFUNCS_RET_TIMESTAMP
、
SUNFUNCS_RET_STRING
、
および SUNFUNCS_RET_DOUBLE
定数は非推奨となりました。
これは PHP 8.1.0 で date_sunset() と
date_sunrise() 関数が非推奨となったことに伴うものです。
DBA
dba_key_split() に null
または 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_result() に
mode
パラメータを明示的に渡すことは非推奨となりました。
この関数のために用意されていたMYSQLI_STORE_RESULT_COPY_DATA
定数も
非推奨となりました。
PDO_PGSQL
ドル記号で囲まれた文字列の中で
エスケープされた疑問符(??
)を使用することは非推奨となりました。
PDO_PGSQL はドル記号で囲まれた文字列をサポートする独自の SQL パーサーを持つようになったため、
それらの中で疑問符をエスケープする必要はなくなりました。
PGSQL
pg_fetch_result()、
pg_field_prtlen()、
および pg_field_is_null() の 2 引数のシグネチャは非推奨となりました。
代わりに row
を null
に設定した 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_cookies
、
session.use_trans_sid
、
session.trans_sid_tags
、
session.trans_sid_hosts
、および
session.referer_check
の INI 設定値を変更することは非推奨となりました。
SID
定数も非推奨となりました。
SOAP
SoapServer::addFunction() に int を渡すことは非推奨となりました。 すべての PHP 関数を提供する必要がある場合は、 get_defined_functions() が返す配列をフラット化してください。
SOAP_FUNCTIONS_ALL
定数は非推奨となりました。
SPL
SplFixedArray::__wakeup() メソッドは 非推奨となりました。代わりに SplFixedArray::__serialize() と SplFixedArray::__unserialize() をオーバーライドしてください。
SplFileObject::setCsvControl()、
SplFileObject::fputcsv()、および
SplFileObject::fgetcsv() で
escape
パラメータのデフォルト値を利用することは非推奨となりました。
引数または名前付き引数で明示的に指定する必要があります。
これは、SplFileObject::setCsvControl() で
新しいデフォルト値を設定した場合、SplFileObject::fputcsv() および
SplFileObject::fgetcsv() には適用されません。
Standard
stream_context_set_option() を 2 つの引数で呼び出すことは非推奨となりました。 代わりに stream_context_set_options() を使用してください。
unserialize() で大文字の S
タグを使用して文字列を
アンシリアライズすることは非推奨となりました。
fputcsv()、
fgetcsv()、および
str_getcsv() の
escape
パラメータのデフォルト値を利用することは非推奨となりました。
引数または名前付き引数で明示的に指定する必要があります。