WordPressサイトのPHP5.6.xをPHP7.0.xへ移行する際に必要なこと

WordPressを長く運用していて、PHPのバージョンアップはしたいが、古いテーマは変更したくない際に必要となる作業についての考察です。

それなりに準備してからでないと、アップグレードはできませんね。

公式サイトの移行情報

以下について、確認および対応が必要となると思われます。

下位互換性のない変更点

https://www.php.net/manual/ja/migration70.incompatible.php

こちらは、それなりに変更点がありますし、改修せざるを得ない項目がありそうです。

エラーや例外の取り扱いの変更

おそらく、この変更のための改修が多くありそうです。

fatal error や recoverable fatal error の多くが、PHP 7 では例外に変換されるようになりました。 これらの例外は Error クラスを継承したもので、 このクラスは Throwable インターフェイスを実装しています。 この新しいインターフェイスを、すべての例外が実装しています。

エラーではなく例外がスローされるようになるということは、自作のエラーハンドラは呼び出されなくなるということです (Error 例外をキャッチしなかった場合は、fatal エラーが発生します)。

PHP 7 におけるエラーハンドリングの詳細な説明は PHP 7 のエラー を参照ください。 この移行ガイドでは、下位互換性のない変更点を列挙するだけにとどめます。

https://www.php.net/manual/ja/migration70.incompatible.php#migration70.incompatible.error-handling

変数の取り扱いの変更

これも、影響が大きそう。

  • 変数やプロパティ、メソッドへの間接的なアクセスの扱いの変更
  • list() の取り扱いの変更
    • list() での変数の代入が、逆順ではなくなる
    • 空の list() の廃止
    • list() は文字列を展開しない
    • 関数のパラメータを括弧で囲んでもその振る舞いは変わらない

foreach の変更

foreach の振る舞いが多少変わりました。 主に、内部の配列ポインタの扱いや、反復処理中の配列の変更に関する部分です。

https://www.php.net/manual/ja/migration70.incompatible.php#migration70.incompatible.foreach

php5の振る舞いに頼ってコーディングしている箇所が多いとは思えませんが、予期せぬ動作を引き起こすかもしれませんね。

int の取り扱いの変更

これは、影響が出る処理は少なそう。

文字列の取り扱いの変更

これも、影響は少なそう。

削除された関数

これも、削除された関数を使っている処理は少なそう。

削除された INI 項目

これも、影響は少なそう。

下位互換性のないその他の変更

挙げられている項目で、多少気に掛ける必要がありそうなものは、以下ですかね。

  • 新しいオブジェクトを参照渡しで代入できない
  • INI ファイルにおける # 形式のコメントの削除
  • JSON 拡張モジュールが JSOND に置き換わる
  • 同値な要素の並び順

変更された関数

https://www.php.net/manual/ja/migration70.changed-functions.php

preg_replace() や substr() の文字列系関数やexec()、system()、passthru()などのシステム系関数の変更は気になりますが、改修が必要となっても限定的ではないでしょうか。

SAPI モジュールの変更

https://www.php.net/manual/ja/migration70.sapi-changes.php

WordPressサイトでは、あまり使われていない機能と思われるため、対応が必要になることはまれでしょう。

削除された拡張モジュールおよび SAPI

https://www.php.net/manual/ja/migration70.removed-exts-sapis.php

こちらも、対応が必要になることはまれでしょう。必要となれば、それなりのプログラム改修がありそうですね。