PHPのお勉強!

PHP TOP

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_error()E_USER_ERROR を使用

trigger_error()error_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_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 引数のシグネチャは非推奨となりました。 代わりに 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::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 パラメータのデフォルト値を利用することは非推奨となりました。 引数または名前付き引数で明示的に指定する必要があります。

XML