WordPressプラグインがPHP7でunexpected 'new' エラーが起きて有効化できない ときの対策

2017年10月4日水曜日

WordPress

t f B! P L
どうもこんにちは。ykyuki.net管理人です。

先日はブログのデータが一部消えてしまい申し訳ありませんでした。

今回はタイトル通り「WordPressプラグインがPHP7でunexpected 'new' エラーが起きて有効化できないときの対策」をお教えします。

なぜこのエラーが起きるのか


このエラーの原因はPHP7に対応していない古いプラグインを使っている場合に発生します。(ざっくりいうと)

今回はComment Form Quicktagsを使用しようとしたときに発生しました。
※おいおい、このプラグインは2年以上更新されていません。

通常は長い間更新されていないプラグインを使うのは脆弱性の危険性もあるためおすすめできません

インストールして有効化しようと思いましたが重大なエラーが発生したため有効化できませんでした。



原因はnewというのがsyntax errorを起こしているのはわかりましたが、詳しくわからなかったので、Google先生に聞いてWordPressのPHP7関係の記事を検索していました。

ヾ(´∀`*)コレ ダーッ!!

参考になりそうなサイトを見つけました。

それがこちら

いつWordPressをPHP7にすべきか?

↑のページからの引用ですが
下位互換のない変更点はいくつかあるのだが、その中でも下記の2点が与える影響が大きい。

  • new文で作成されたオブジェクトの参照渡し $c =& new MyClass() が廃止

  • PHP4形式のコンストラクタ(クラス名と同名のメソッド)がエラーを吐く



どうやらこのエラーはnew文で作成されたオブジェクトの参照渡しの廃止によって起きているようです。

そしてエラーは「& new」から「new」に直すと解決できるようです。(php5以上のバージョンでは& newとnewの違いはない)

このエラーの直し方


では「& new」を使っているところを探してみましょう。はい、見つかりました。

上のエラー画像でも出ていますがcomment-form-quicktags.phpの489行目です。

これですね。
[code]
/**
* CommentFormQuicktags class instance.
*/
$comment_form_quicktags =& new CommentFormQuicktags();  //←これ
[/code]

↑を以下のように直します。
[code]
/**
* CommentFormQuicktags class instance.
*/
$comment_form_quicktags = new CommentFormQuicktags();  //←これから&を取る
[/code]

これでプラグインが有効化できるようになりました。

他のプラグインの場合では& newを使っているところを全部直さなければいけません。(このプラグインでは1つだけでしたが)

まとめ



  • php7に対応していない古いプラグインは使わない。(脆弱性等の危険性もあるため)

  • & new 文を直すだけで動くというわけではない。

QooQ