WordPressサイトをPHP 8.2で動かしていると、次のような警告がログや画面に出ることがあります。
Deprecated: Creation of dynamic property … is deprecated
これは 「サイトが壊れた」エラーではなく、将来の互換性に関する警告です。 しかし、はじめて見ると大量に出て不安になりますし、WP_DEBUGをONにしている環境ではサイト表示に支障が出ることもあります。
この記事では、 何が起きているのか/なぜ出るのか/どう対応すべきか をわかりやすく整理します。
1. この Deprecated 警告は何を意味しているのか
PHP 8.2から、動的プロパティ(dynamic property)の生成が非推奨化されました。 動的プロパティとは、クラス定義に含まれていないプロパティを、オブジェクト生成後の実行時に追加することです。
例えば、こうしたコードがあると警告が出ます:
class Foo {}
$foo = new Foo;
$foo->bar = 1; // dynamic property
これを実行すると、PHP 8.2では Deprecated: Creation of dynamic property の警告が出ます。
これは、クラスが事前に定義していないプロパティを後から追加したためです。
2. なぜこの警告が出るようになったのか
以前のPHPは、動的プロパティを自由に作れる設計でしたが、 PHP 8.2 ではこれが非推奨(Deprecated)になり、将来的にはエラー化する可能性があります。
そのため、WordPress本体やプラグイン、テーマのコードで クラスに存在しないプロパティを設定していると、PHP側が警告を出すようになりました。
3. WordPressでよく見られるケース
この警告は、実際の動作には影響しませんが、WP_DEBUGをONにしている環境では表示されますし、 大量に出るとログが見づらくなったり、エラー処理の妨げになることがあります。
よく見られる例:
- プラグインが動的プロパティで内部状態を保持している
- テーマが動的プロパティを使っている
- WP本体やサブシステムが一部で動的プロパティを使っている
これらは PHP 8.2 の仕様変更に追いついていないコード です。
4. 今すぐやるべきこと
🔹 ① プラグイン/テーマを最新化する
警告元がプラグインやテーマの場合、多くはアップデートで修正済みのことがあります。 まずは最新版へ更新しましょう。
🔹 ② WP_DEBUG表示を抑える(本番環境)
本番環境で警告が表示されると見苦しい場合、まずは次を設定します:
define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', true);
これで画面への表示を止めつつ、ログには残せます。
🔹 ③ コード側の対応(開発者向け)
① クラスにプロパティを宣言する
class MyClass {
public $myProp; // 宣言
}
② #[AllowDynamicProperties] 属性を付ける
PHP 8.2では次のように指定することで非推奨の警告を抑えられますが、将来的な仕様変更で削除される可能性もあります。
#[AllowDynamicProperties]
class MyClass {}
5. なぜPHP 8.2は動的プロパティをDeprecatedにしたのか
動的プロパティは非常に柔軟ですが、その反面、
- 予期せぬプロパティが混入する
- IDE補完が効かない
- バグの温床になりやすい
という欠点があります。 PHPはこれをやめる方向に動いており、WPコミュニティでも対応が進んでいます。
6. まとめ
Deprecated: Creation of dynamic propertyは致命的エラーではなく警告- PHP 8.2 から仕様変更で出るようになった
- 対処は プラグイン更新/テーマ修正/表示抑制
- 将来のPHPバージョンに向けてコードを整理しておくことが大切
この警告は、PHP・WordPressの成熟に伴うものです。 単に「消せないと嫌だ」ではなく、コードをきれいにする合図として捉えることで、サイトの長期的な安定性が高まります。