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() は、推奨されなくなりました。

add a note add a note

User Contributed Notes 1 note

up
-3
tabflo at gmx dot at
1 year ago
a have a baseclass for all databasemodels and handle my dynamic property setter and getter this way:

    public array $dynamicProperties = [];

    public function __set(string $name, mixed $value) {
        if(property_exists($this, $name))
            $this->{$name} = $value;
        else
            $this->dynamicProperties[$name] = $value;
    }
   
    public function __get(string $name) {
        if(property_exists($this, $name))
            return $this->$name;
        else
            return $this->dynamicProperties[$name];
    }

just put the content into a class and extend from it. enjoy :)
To Top