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 エラーが発生します)。
https://www.php.net/manual/ja/migration70.incompatible.php#migration70.incompatible.error-handling
PHP 7 におけるエラーハンドリングの詳細な説明は PHP 7 のエラー を参照ください。 この移行ガイドでは、下位互換性のない変更点を列挙するだけにとどめます。
変数の取り扱いの変更
これも、影響が大きそう。
- 変数やプロパティ、メソッドへの間接的なアクセスの扱いの変更
- 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
こちらも、対応が必要になることはまれでしょう。必要となれば、それなりのプログラム改修がありそうですね。