新しいこれらのメソッドだけを実装するか、 これらのメソッドをサポートしていない PHP 7.4 より前のバージョンでも使う場合は、 新旧両方のインターフェイスを実装すべきです。
null
を渡した場合ビルトイン関数のスカラー型の引数は、 デフォルトで nullable ですが、 この振る舞いは推奨されなくなりました。 ユーザ定義の関数においては、 スカラー型の引数は nullable と明示的にマークする必要があり、 その振る舞いと合わせるためです。
<?php
var_dump(str_contains("foobar", null));
// Deprecated: Passing null to parameter #2 ($needle) of type string
// is deprecated
?>
精度を損なうことになる float から int への暗黙の変換は、 推奨されなくなりました。 これは配列のキーに float を使った場合や、 型の自動変換 (coerciveモード) 時に int 型を宣言した場合や、 int に対して演算子を適用する場合に影響します。
<?php
$a = [];
$a[15.5]; // 推奨されません。0.5 がキーの値から失われるからです
$a[15.0]; // 15.0 == 15 なので OK
?>
トレイトにある static メソッドや、 static プロパティに直接アクセスすることは、 推奨されなくなりました。 これらは、トレイトを使っているクラスからのみアクセスすべきものです。
配列でない値を __sleep() から返すと、警告が発生するようになりました。
<?php
function &test(): void {}
?>
Only variable references should be returned by reference
という E_NOTICE
が既に発生するようになっています。 false
な変数を自動的に復活させる挙動(Autovivification) Autovivification とは、 値を追加しようとする際に配列を自動で生成する処理のことです。 スカラー型の値からこのような処理を行うことは禁止されていますが、 false
だけは例外でした。 このバージョンから、この例外も推奨されなくなります。
<?php
$arr = false;
$arr[] = 2; // 推奨されません
?>
注意:
null
や 未定義値から、 自動的に配列を生成する処理は未だ許可されています:<?php
// 未定義値から配列を生成
$arr[] = 'some value';
$arr['doesNotExist'][] = 2;
// null から配列を生成
$arr = null;
$arr[] = 2;
?>
ctype関数 に文字列でない引数を渡すことは、 推奨されなくなりました。 将来のバージョンでは、引数は ASCII コードポイントではなく、 文字列として解釈されるようになります。 ユーザが意図する振る舞いによっては、 引数を文字列にキャストするか、 chr() を明示的にコールすべきです。 全ての ctype_*()
関数が影響を受けます。
date_sunrise() と date_sunset() は、推奨されなくなりました。 date_sun_info() を使って下さい。
strptime() 関数は、 推奨されなくなりました。 (ロケールに依存しないパースを行う場合) date_parse_from_format() または (ロケールに依存するパースを行う場合) IntlDateFormatter::parse() を代わりに使って下さい。
strftime() と gmstrftime() は、推奨されなくなりました。 (ロケールに依存しないフォーマットを行う場合) date() または (ロケールに依存するフォーマットを行う場合) IntlDateFormatter::format() を代わりに使って下さい。
FILTER_SANITIZE_STRING
と FILTER_SANITIZE_STRIPPED
フィルタは、推奨されなくなりました。
INI ディレクティブ filter.default は、推奨されなくなりました。
imagepolygon(), imageopenpolygon(), imagefilledpolygon() の num_points
引数は、 推奨されなくなりました。
mhash(), mhash_keygen_s2k(), mhash_count(), mhash_get_block_size(), mhash_get_hash_name() は、推奨されなくなりました。 hash_*()
関数を代わりに使って下さい。
定数 NIL
は、推奨されなくなりました。 0
を代わりに使って下さい。
IntlCalendar::roll() に bool 引数を渡してコールすることは、 推奨されなくなりました。 true
と false
の代わりに、 1
と -1
をそれぞれ渡すようにして下さい。
mb_check_encoding() 関数を引数を渡さずにコールすることは、推奨されなくなりました。
mysqli_driver::$driver_version プロパティは、推奨されなくなりました。 このプロパティは意味がなく、時代遅れになっています。 PHP_VERSION_ID
を代わりに使って下さい。
mysqli
引数を渡して、 mysqli::get_client_info() や mysqli_get_client_info() をコールすることは、推奨されなくなりました。 クライアントライブラリのバージョン情報を取得するには、 mysqli_get_client_info() を引数なしでコールするようにして下さい。
mysqli::init() メソッドは、 推奨されなくなりました。 parent::init() のコールを parent::__construct() に置き換えるようにして下さい。
INI ディレクティブ oci8.old_oci_close_semantics は、推奨されなくなりました。
odbc_result_all() 関数は推奨されなくなりました。
フェッチモードの定数 PDO::FETCH_SERIALIZE
は、推奨されなくなりました。
全ての pgsql_*()
関数に対して、接続リソースを渡さないことは推奨されなくなりました。
SoapClient::__construct() の ssl_method
オプションは推奨されなくなりました。 SSL コンテキストオプションを使うのが望ましいです。
object に対して、 key(), current(), next(), prev(), reset(), end() を呼び出すことは推奨されなくなりました。 get_mangled_object_vars() を使って 最初に object を配列に変換するか、 ArrayIterator のような Iterator を実装したクラスのメソッドを使ってください。
INI ディレクティブ auto_detect_line_endings は、推奨されなくなりました。 必要な場合は、 "\r"
を手動で扱うようにして下さい。
定数 FILE_BINARY
と FILE_TEXT
は推奨されなくなりました。 これらの定数は、使われたことがありませんでした。