タグアーカイブ PHP 8.5

PHP 8.5で(boolean)キャストの非推奨警告が出た時のWordPressでの対処法

PHP 8.5で(boolean)キャストの非推奨警告が出た時のWordPressでの対処法

PHP 8.5にバージョンアップしたWordPressサイトで「Non-canonical cast (boolean) is deprecated」という警告が表示されたら、(boolean)と書かれたキャストを(bool)に置き換えるだけで解消する。これはPHP 8.5で非正規のスカラー型キャストが非推奨になったためで、テーマやプラグインのコードを修正する必要がある。

PHP 8.5で非推奨になった(boolean)キャストとは

PHP 8.5で非推奨になった(boolean)キャストとは

PHPは長らく、変数の型を変換するために(boolean)(integer)といった別名のキャスト記法を受け入れてきた。しかしPHP 8.5から、これらの「正式でない(non-canonical)」表記は非推奨として扱われ、実行時にDeprecation警告が発生する。ブーリアン型へのキャストは(boolean)ではなく(bool)を、整数型は(integer)ではなく(int)を使うようPHP本体が求めるようになったのだ。

この変更は将来のバージョンで古い記法を完全に削除するための前段階で、今のうちに修正しないと、PHP 9.0以降で致命的エラーに変わる可能性がある。WordPressのテーマやプラグインのコードにこうした古いキャストが残っていると、サイトのエラーログに大量の警告が出力されたり、デバッグモードで画面に表示されたりする。

この警告がWordPressサイトで発生するケース

この警告がWordPressサイトで発生するケース

実際にWordPressでこの警告が出るのは、プラグインが原因であることがほとんどだ。たとえばカスタムフィールドを拡張する有名な「Pods」プラグインの古いバージョンでは、オートコンプリートフィールドの必須設定などを処理する部分で(boolean)キャストを使っており、PHP 8.5環境では次のような警告が発生する(実例を簡略化して示す)。

Deprecated: Non-canonical cast (boolean) is deprecated, use the (bool) cast instead in /var/www/example.com/wp-content/plugins/pods/classes/fields/pick.php on line 1113

同じ警告は、他のカスタムプラグインや古いテーマでも起こり得る。共通するのは「(boolean)」「(integer)」といったエイリアス表記がコード内に存在し、かつサーバーのPHPバージョンが8.5以上になっているという条件だ。PHP 8.4までなら問題なく動作していたサイトが、アップグレードした途端に警告まみれになる典型例といえる。

警告を解消するための具体的な対処法

警告を解消するための具体的な対処法

解決の根本は、警告が指摘するファイル内の(boolean)(bool)に書き換える一手間だけだ。ただし、プラグイン本体を直接編集するとアップデートで上書きされてしまうため、一時的な対処か、プラグイン開発者へ修正を依頼するのが本筋になる。ここではサイト管理画面からFTPやファイルマネージャーでアクセスできる場合の手順を示す。

Before(非推奨)
$ajax = (boolean) $field_data[‘autocomplete’];
After(修正後)
$ajax = (bool) $field_data[‘autocomplete’];

修正が必要なファイルと行を特定する

警告メッセージにはファイルのパスと行番号が明示されている。たとえば「/var/www/example.com/wp-content/plugins/pods/classes/fields/pick.php on line 1113」のように表示されるので、そのパスを頼りに該当ファイルを開く。サーバー上のパスはサイトのドキュメントルートからの絶対パスで示されるため、FTPクライアントやサーバー管理ツールのファイルマネージャーで同じディレクトリを探せばよい。

コードエディタで(boolean)(bool)に置換する

該当行を開いたら、まずバックアップを取った上で編集を始める。書き換えは極めて単純で、(boolean)という文字列を(bool)に置き換えるだけだ。同じファイル内に複数箇所ある可能性が高いので、エディタの検索機能を使って「(boolean)」をすべて検索し、該当行をまとめて修正すると確実に警告を一掃できる。もし(integer)(real)など他の非推奨キャストも見つかれば、それぞれ(int)(float)へ変更しておく。

修正後に動作確認とログのチェックを行う

ファイルを上書き保存したら、必ずWordPressのデバッグモードを有効にしてwp-config.phpdefine('WP_DEBUG', true);を設定し、サイトを数ページ表示して同種の警告が消えたことを確認する。デバッグモードを無効にしていてもサーバーのPHPエラーログには記録されるため、ログを監視している場合はそちらでも最終チェックを行う。修正が完了したら、デバッグモードは元に戻しておく。

プラグイン開発者向けの恒久対応と注意点

プラグイン開発者向けの恒久対応と注意点

自作プラグインの開発者や、クライアントワークで修正依頼を受ける制作者は、より根本的な対応を検討すべきだ。PHP 8.5の非推奨変更は、コード全体にわたって古いキャストが使われていないか一括でチェックする良い機会になる。

エディタの正規表現検索で「\(boolean\)」「\(integer\)」「\(real\)」「\(double\)」といったパターンを検索し、それぞれ(bool)(int)(float)(float)へ置き換えると効率的だ。なお(real)(double)はどちらも浮動小数点数型を意味するエイリアスで、いずれも(float)が正式なキャストになる。

ただし、プラグインの互換性を保つために、PHP 8.5専用のコードに一気に書き換えるのではなく、バージョン分岐と組み合わせる方法もある。if (version_compare(PHP_VERSION, '8.5', '>=')) {で新しいキャストを使い、それ以前は従来の記法を残すといった対応だ。とはいえ(bool)自体はPHP 4から存在する極めて古い正式キャストなので、事実上すべてのバージョンで動作する。互換性を気にする必要はほとんどない。

よくある質問

PHP 8.5以外のバージョンでもこの警告は出るのか

いいや、PHP 8.5で初めて「Non-canonical cast」の非推奨警告が導入された。PHP 8.4以下では(boolean)は問題なく動作し、警告も出ない。ただしPHP 9.0ではエラーに格上げされる見込みのため、早めに対処しておくと将来的に安全だ。

警告を放置してもサイトの動作に問題はないのか

現時点ではDeprecation警告であり、サイトの表示や動作が止まることはない。しかしデバッグモードがオンの場合、画面上部に警告が表示されてレイアウトが崩れたり、エラーログが膨大になってサーバーのディスクを圧迫する可能性がある。長期的にはPHPのバージョンアップでエラーになるため、放置は推奨しない。

プラグインのアップデートで自動的に修正されるのか

プラグイン開発者が修正をリリースすれば、アップデートするだけで警告は解消される。たとえばPodsプラグインでは既にこの問題が報告されており、近いバージョンで(bool)への書き換えが行われる可能性が高い。開発者にフィードバックを送ることも有効な手段だ。

警告を非表示にするだけの対処は可能か

wp-config.phpdefine('WP_DEBUG', false);にすれば管理画面やフロントエンドへの表示は止められる。ただしPHPのエラーログには記録され続けるため、根本解決にはならない。また、error_reportingを変更してDeprecationを抑制する方法もあるが、他の重要な非推奨警告も見逃すためおすすめできない。コードを修正するのが最も確実で手間も少ない。

子テーマや自作コードがない場合、どこを修正すればいいのか

該当するプラグインのファイルを直接編集しなければならないが、前述のとおりアップデートで上書きされるリスクがある。恒久的な対策としては、プラグインの開発者に修正を依頼するか、GitHubなどでプルリクエストを送るのが理想的だ。どうしてもすぐに警告を消したい場合は、修正後にプラグインの自動更新を停止しておき、次期バージョンで公式対応されるまで手動管理する手もある。

この記事のポイント

  • PHP 8.5で(boolean)キャストは非推奨になりDeprecation警告が出る
  • (boolean)(bool)に書き換えれば警告は消える
  • 警告メッセージのファイルパスと行番号を頼りに修正箇所を探す
  • 修正は単純な置換だがバックアップを取ってから行う
  • プラグイン本体の編集はアップデートで上書きされる点に注意