PHP 8.1.x で推奨されなくなる機能
PHP コア
__serialize,
__unserialize がない状態で、
Serializable を実装するのは推奨されない
新しいこれらのメソッドだけを実装するか、
これらのメソッドをサポートしていない
PHP 7.4 より前のバージョンでも使う場合は、
新旧両方のインターフェイスを実装すべきです。
ビルトイン関数の nullable でない引数に null
を渡した場合
ビルトイン関数のスカラー型の引数は、
デフォルトで nullable ですが、
この振る舞いは推奨されなくなりました。
ユーザ定義の関数においては、
スカラー型の引数は nullable と明示的にマークする必要があり、
その振る舞いと合わせるためです。
暗黙の float から int への変換
精度を損なうことになる
float から int への暗黙の変換は、
推奨されなくなりました。
これは配列のキーに float を使った場合や、
型の自動変換 (coerciveモード) 時に int 型を宣言した場合や、
int に対して演算子を適用する場合に影響します。
トレイトの static な要素をコールする
トレイトにある
static メソッドや、
static プロパティに直接アクセスすることは、
推奨されなくなりました。
これらは、トレイトを使っているクラスからのみアクセスすべきものです。
__sleep から配列でない値を返す
配列でない値を
__sleep()
から返すと、警告が発生するようになりました。
void の関数からリファレンスを返す
上記のような関数は矛盾しているため、
呼び出された時に
Only variable references should be returned by reference
という
E_NOTICE
が既に発生するようになっています。
false
な変数を自動的に復活させる挙動(Autovivification)
Autovivification とは、
値を追加しようとする際に配列を自動で生成する処理のことです。
スカラー型の値からこのような処理を行うことは禁止されていますが、
false
だけは例外でした。
このバージョンから、この例外も推奨されなくなります。
注意:
null
や 未定義値から、
自動的に配列を生成する処理は未だ許可されています:
ctype 関数
文字列でない引数の検証
ctype関数 に文字列でない引数を渡すことは、
推奨されなくなりました。
将来のバージョンでは、引数は ASCII コードポイントではなく、
文字列として解釈されるようになります。
ユーザが意図する振る舞いによっては、
引数を文字列にキャストするか、
chr
を明示的にコールすべきです。
全ての ctype_*()
関数が影響を受けます。
日付・時刻 関数
date_sunrise
と
date_sunset
は、推奨されなくなりました。
date_sun_info
を使って下さい。
strptime 関数は、
推奨されなくなりました。
(ロケールに依存しないパースを行う場合)
date_parse_from_format
または
(ロケールに依存するパースを行う場合)
IntlDateFormatter::parse
を代わりに使って下さい。
strftime
と
gmstrftime
は、推奨されなくなりました。
(ロケールに依存しないフォーマットを行う場合)
date
または
(ロケールに依存するフォーマットを行う場合)
IntlDateFormatter::format
を代わりに使って下さい。
Filter
FILTER_SANITIZE_STRING
と
FILTER_SANITIZE_STRIPPED
フィルタは、推奨されなくなりました。
INI ディレクティブ
filter.default
は、推奨されなくなりました。
GD
imagepolygon,
imageopenpolygon,
imagefilledpolygon
の
num_points
引数は、
推奨されなくなりました。
Hash
mhash,
mhash_keygen_s2k,
mhash_count,
mhash_get_block_size,
mhash_get_hash_name
は、推奨されなくなりました。
hash_*()
関数を代わりに使って下さい。
IMAP
定数 NIL
は、推奨されなくなりました。
0
を代わりに使って下さい。
国際化関数(Intl)
IntlCalendar::roll
に bool 引数を渡してコールすることは、
推奨されなくなりました。
true
と false
の代わりに、
1
と -1
をそれぞれ渡すようにして下さい。
マルチバイト文字列
mb_check_encoding
関数を引数を渡さずにコールすることは、推奨されなくなりました。
MySQLi
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
に置き換えるようにして下さい。
ODBC
odbc_result_all 関数は推奨されなくなりました。
PDO
フェッチモードの定数 PDO::FETCH_SERIALIZE
は、推奨されなくなりました。
PgSQL
全ての
pgsql_*()
関数に対して、接続リソースを渡さないことは推奨されなくなりました。
SOAP
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
は推奨されなくなりました。
これらの定数は、使われたことがありませんでした。