PHP 7 にすると処理が速くなるようなので、 PHP 5 から PHP 7 にしたら WordPress のプラグインの Ktai Style がエラーを吐いたので修正してみました。
Ktai Style はガラケー(フューチャーフォン)で WordPress のコンテンツを見られるようにするプラグインです。 PHP 7 でどんなエラーになるかというと、パソコンではコンテンツ部分が表示されず、ガラケー(フューチャーフォン)では何も表示されません。
原因を確かめるため Firefox にフューチャーフォンのエミュレータみたいなアドオンをインストールして確認しました。 i-mode でエラーを吐いたところは他のキャリアでもエラーをはずなので、同じように直しています。
→ FireMobileSimulator
まとまると Ktai Style が PHP 7 で動かないのには大きく 2 つの原因がありました。
- クラス継承しているのに引数の数が違う
- preg_replace() で e 修飾子を使い関数を呼び出している
どちらも PHP 4 のころの書き方で、上は PHP 5.4 から 下は PHP 5.5 で非推奨になり PHP 7 で廃止されました。
目次
クラス継承しているのに引数の数が違う
クラス継承によりメソッドを上書きしているのに、親クラスと引数の数が違うことが原因でエラーを吐いています。 PHP 4 などで使われていた古い記述方法みたいです。対策として初期値をつけた引数をつけ加えました。 ( その解決方法で本当にいいのかわかりませんが。)
→ Shin x blog : PHP E_STRICT で表示されるエラーメッセージを調べてみた
operators/base.php 2454 行目ほか
operators/base.php 2454 行目、 operators/i-mode.php 321 行目、 operators/emobile.php 363 行目、 operators/ezweb.php 1040 行目、 operators/softbank.php 549 行目、 operators/willcom.php 702 行目
変更前:
変更後:
operators/i-mode.php 330 行目ほか
これもクラスを継承しているのに引数の数が違うので、同じの数になるように初期値ありで追加しました。
operators/i-mode.php 330 行目、 operators/emobile.php 372 行目、 operators/ezweb.php 1049 行目、 operators/softbank.php 557 行目、 operators/willcom.php 712 行目
変更前:
変更後:
inc/template-tags.php の KS_Walker_Comment クラス内
このエラーは KS_Walker_Comment クラスが WordPress のコアの関数である wp-includes/class-wp-walker.php の Walker を拡張しているにも関わらず、 start_lvl() などの関数と引数の数が異なるためエラーを吐いています。これも元の関数と同じ数の引数を初期値で追加しました。
→ WordPress.org : Walker::start_lvl()
inc/template-tags.php 2313 行目
変更前:
変更後:
inc/template-tags.php 2332 行目
変更前:
変更後:
inc/template-tags.php 2351 行目
変更前:
変更後:
inc/template-tags.php 2404 行目
変更前:
変更後:
admin/templates.php の KtaiCategory_Checklist クラス内
エラーログは確認していませんが、すべてのファイルを検索して Walker を拡張しているクラス部分を書き換えました。
admin/templates.php 413 行目
変更前:
変更後:
admin/templates.php 417 行目
変更前:
変更後:
admin/templates.php 421 行目
変更前:
変更後:
admin/templates.php 430 行目
変更前:
変更後:
preg_replace() で e 修飾子を使い関数を呼び出している
上記のようなエラーがでます。 preg_replace() で e 修飾子を使い関数を呼び出していたことが原因でした。 e 修飾子は PHP 7.0.0 で廃止されました。代わりに preg_replace_callback() を使用して無名関数を呼び出して書き直しました。
operators/base.php 2017 行目
マッチした配列以外の引数を self::pict_replace() に渡していたので、一度 use を使った無名関数でラップしてから、 self::pict_replace() に引数を渡しました。
→脱力系備忘録 BloG : preg_replace_callback のコールバック関数に複数引数を指定したい
operators/base.php 2017 行目
変更前:
変更後:
operators/base.php 1964 行目
変更前:
変更後:
operators/base.php 2436 行目
変更前:
変更後:
operators/i-mode.php 1745 行目ほか
これもマッチした配列以外を引数で渡しているので、 use を使いました。
operators/i-mode.php 1745 行目、 operators/emobile.php 1761 行目、 operators/ezweb.php 2076 行目、 operators/softbank.php 1741 行目、 operators/willcom.php 1709 行目
変更前:
変更後:
patches/mobile.php 17 行目
変更前:
変更後:
inc/kses.php 206 行目
これもマッチした配列以外を引数として渡しているので、 use を使いました。
変更前:
変更後:
inc/kses.php 580 行目
変更前:
変更後:
inc/kses.php 612 行目
変更前:
変更後:
inc/kses.php 635 行目
変更前:
変更後:
inc/shrinkage.php 918 行目
変更前:
変更後:
エミュレータでも実機でも確認しましたが、特に不具合はありませんでしたが、もしエラーが見つかったらコメントいただけるとありがたいです。

