|
PHP 8.2.x で推奨されなくなる機能
PHP コア
動的なプロパティの利用
クラスにアトリビュート #[\AllowDynamicProperties] を付加していない場合、
動的にプロパティを生成することは推奨されなくなりました。
stdClass で動的なプロパティを使うことはまだ許可されています。
マジックメソッド
__get() / __set()
を使う場合は、この変更の影響は受けません。
動的なプロパティによる非推奨の警告については、以下によって対応できます:
- プロパティを宣言する (好ましい対応方法です)
-
クラスにアトリビュート
#[\AllowDynamicProperties] を付加する
(すべての子クラスにも適用されます)
-
追加のデータをオブジェクトと関連付ける必要があるが、
そのオブジェクトがデータを所有していない場合、
WeakMap を使う
部分的にしかサポートされていない callable
$callable() 形式で呼び出せない
(但し、call_user_func を使うと呼び出せる) callable は、推奨されなくなりました。
特に注意すべきなのは以下です:
"self::method"
"parent::method"
"static::method"
["self", "method"]
["parent", "method"]
["static", "method"]
["Foo", "Bar::method"]
[new Foo, "Bar::method"]
この変更は、
"A::method" や ["A", "method"]
のような通常のメソッド呼び出し形式の callable には影響しません。
"${var}" / "${expr}" 形式の、文字列への値の埋め込み
"${var}" と "${expr}" 形式の文字列への値の埋め込みは、推奨されなくなりました。
"$var"/"{$var}" や "{${expr}}" 形式をそれぞれ使ってください。
マルチバイト文字列
'テキストエンコーディング'
QPrint , Base64 ,
Uuencode , HTML-ENTITIES を使うことは、
全ての mbstring の関数で推奨されなくなりました。
mbstring でサポートされている他のテキストエンコーディングと異なり、
これらは Unicode のコードポイント列でエンコードされておらず、
生のバイト列でエンコードされています。
これらのテキストエンコーディングが指定された場合、
ほとんどの mbstring 関数では、何が正しい戻り値なのか明確でありません。
さらに、これらのエンコーディングについてはすべて、PHP には別の組み込みの実装が存在します。
たとえば、UUencode されたデータについては、
convert_uuencode / convert_uudecode が使えます。
Standard PHP Library(SPL)
内部メソッド SplFileInfo::_bad_state_ex は、推奨されなくなりました。
標準ライブラリ
utf8_encode と utf8_decode は、推奨されなくなりました。
|