そんなにGeekじゃないエンジニアブログ

PHPは動作環境のバージョンを確認すべし!private constが使えなくてWordPressプラグインのsvnコミットでエラーが出た話

calendar

こんにちは。でんすけ(@notgeek_densuke)です。

今回は、PHPはバージョンを確認しましょう、という話です。
わかってる人はわかってるって話なんでしょうけどね。

スポンサーリンク

private constが使えない

今回僕が遭遇した問題はこれです。

if( !class_exists('dn_ctrp_sndcld_class') ){
    class dn_ctrp_sndcld_class{
        private const SETTINGSTYLE_SLUG = 'dn_ctrp_sndcld_setting_style';
    }
}

自作のWordPressプラグインのソースの一部です。
SoundCloud再生ボタンのプラグインです。

SoundCloudの再生やスキップ機能を追加するWordPressプラグイン「Control panel for SoundCloud(SoundCloud再生パネル)」つくりました

何が問題だったかというと、private constの宣言
これが原因でちょっとした問題に。

自分が使っているサーバでは特に問題なく動いていたんですが、
WordPressのSVNにコミットする際にエラーで怒られました。

WordPressのSVNはエラーチェックが入る

実際に、SVNにコミットしようとするとこんなエラーが。

syntax error。
constが予期しないところに現れた、とのこと。

なんのこっちゃ?
てか、svnってコンパイルエラー的なチェックできるんですね。知らなかった。

余談:SVNのフックスクリプト

SVNでは、いくつかの処理のタイミングに、独自の処理をフックすることができるようです。

pre-commitというタイミングにフックして、phpのエラーチェックを実行させると、コミットを中断させることができるとのこと。

詳しいやり方はここでは書きませんが。。
オライリーなんかには載ってそうです。

private constはPHP 7.1.0 以降から

で、WordPressのSVNにコミットできない件を調べていると、
private constという宣言はPHP 7.1.0 以降から使えるとのこと。
おそらく、これが原因。

WordPressのSVNでエラーチェックされるPHPのバージョンがもうちょっと古い(と思われる)ので、private constが使えなかった模様。

実際のところ、こんな感じで、privateを外せば問題なくコミットできました。

const SETTINGSTYLE_SLUG = 'dn_ctrp_sndcld_setting_style';

不要なアクセスはできるだけ遮断しようと思ったんですが。
まぁ、privateを外したところで挙動が大きく変わるわけではないので、いいっちゃいいんですけどね。

WordPressの推奨環境は?

ちなみに。
WordPressの推奨環境は、こちらの公式ページに記載があります。

「PHP version 7.2 or greater.」とのことで、WordPressを動かすにはPHPのバージョンは7.2以上を使うのがいいよ!(2018年6月現在)とのこと。

じゃぁなんでprivate constが怒られるねん、とは思いますが。。。
ある程度古いPHPでも動くように配慮して、古めのPHPでチェックしてるのかも?

WordPressは、ある程度古いPHPも動くように後方互換をいろいろ考えてやってるみたいなので、あまり新しい書き方をガンガン取り入れていくのは難しいのかもしれないなぁ、と思いました。
実際、PHPが更新されていってないサーバーもあるでしょうしね。

readme.txtにも記載できる

WordPressプラグイン開発の場合には、readme.txtにPHPのバージョンを記載できます。

Requires PHP: 5.2.4

こんな感じで。
これを書いておくと、プラグインをダウンロードしたときに必要なPHPバージョンが表示されるようです。

ただ、表示されるだけっぽいので、根本的な解決にはならなそうですが。
しかも、詳細表示を押したときの画面にだけ表示されるという。

どうしても新しいPHPじゃないと動かないモノを作りたい!という場合でなければ、古い書き方で統一しておくのが無難かもなぁ、という感じです。

まとめ

ということで、PHPのバージョンは難しい、という話でした。

自分のサーバーだけで使うPHPであればいいんですが、WordPress関連だとどういうサーバーで動かされるかわからんので、ある程度ファジーな書き方が求められるのかなぁ、と思いました。

バージョンにはお気を付けくださいませ。

それではまたー。

この記事をシェアする

コメント

コメントはありません。

down コメントを残す




CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください