PHPの次の版であるPHP 8.6は、11月19日の正式公開に向けてリリース候補の段階に入っています。PHPの公式wikiに載っている予定表では、9月22日に機能の追加が締め切られ、10月21日にRC4が出て、11月5日のRC5を経て正式版になる流れです。新しい書き方の話題も多い版ですが、WordPressやPHPで作った中小企業のサイトを預かる立場からすると、まず気になるのは「上げたときに何が変わるか」です。php-srcの変更点をまとめたUPGRADINGファイルと、Laravel Newsの解説をもとに、現場で先に確かめておきたい項目を並べてみます。
その1 セッションの既定値が安全側に変わる
いちばん影響がありそうなのが、セッションに関する設定の既定値です。php.iniで明示していない場合、session.use_strict_modeは1に、session.cookie_httponlyは1に、session.cookie_samesiteはLaxになります。セッションIDの固定化を防ぎ、JavaScriptからセッションのクッキーを読めなくし、ほかのサイトからのPOSTにはクッキーを付けないという、いまでは推奨とされる設定が最初から入る形です。
多くのサイトにとっては良い変化ですが、外部の決済サービスから戻ってくるときにPOSTでセッションを引き継ぐ作りや、JavaScriptでセッションのクッキーを読んでいる古い仕組みは、動きが変わる可能性があります。UPGRADINGでは、こうした作りではSameSiteをNoneにし、あわせてsecure属性を有効にするよう案内されています。独自のフォームや会員機能をPHPのセッションで作っているサイトは、検証環境で決済や問い合わせの流れを一度通しておくと安心です。
その2 日本語の正規表現で使うmbregexが非推奨になる
日本の制作現場で見落としやすいのがこれです。mbstringの正規表現機能(mbregex)が非推奨になりました。理由は、下支えしているOnigurumaというライブラリの保守が止まっているためとされています。mb_eregやmb_ereg_replaceは、日本語の文字列を扱う古いプラグインや自作の関数で使われていることがあります。すぐに動かなくなるわけではありませんが、非推奨の警告がログに出はじめるので、preg_系の関数への置き換えを計画しておくとよさそうです。
その3 細かな非推奨がまとめて入る
今回は小さな非推奨がかなり多く入っています。たとえばis_integer()やis_long()、is_double()、doubleval()といった別名の関数、spl_object_hash()、finallyの中でのreturn、define()の3番目の引数などです。どれも長く使われてきたものなので、年季の入ったテーマや自社で書いたコードに残っていることがあります。ログに警告が大量に出てディスクを圧迫する、という事故はPHPの版上げで毎回のように見かけるので、本番の前に検証環境でエラーログを眺めておきたいところです。
その4 文字列や配列の関数の振る舞いが少し変わる
非推奨ではなく、振る舞いそのものが変わるものもあります。trim()、ltrim()、rtrim()は、既定で改ページ文字も取り除くようになりました。array_filter()は、モードの引数に不正な値を渡すとエラーを投げます。preg_grep()は、正規表現の処理に失敗したとき途中までの配列ではなくfalseを返すようになりました。普段の使い方で困ることは少ないはずですが、入力値の整形やCSVの読み込みのような処理では、結果が変わらないかを確かめておくと確実です。
その5 書く側がうれしい新機能
もちろん新しい機能もあります。値を上限と下限の間に収めるclamp()関数が加わり、min()とmax()を組み合わせる書き方を置き換えられます。引数の一部だけを先に決めて関数を作る部分適用(partial function application)、時間の長さを表すTime\Durationクラス、readonlyのプロパティに既定値を持たせられる変更も入りました。テーマやプラグインの開発で使えるのは、WordPress本体や配布先の環境がPHP 8.6を前提にできるようになってからなので、当面は自社の案件や社内の道具で試すくらいが現実的です。
PHPの版上げは、レンタルサーバーやホスティングの管理画面で切り替えるだけに見えて、実際にはテーマ、有効なプラグイン、独自のコードのすべてが新しい版で動くかにかかっています。正式版が出てすぐに上げる必要はありませんが、セッションまわりとmbregexの2点だけでも、いまのうちに手元のサイトで使っていないかを確かめておくと、年明けからの移行がずっと楽になるはずです。













