PHP
PHP7

【社内LT用資料転載】PHP7移行概要


はじめに

開発チーム全員のベーススキルの平準化・底上げのために社内でLTの試みが始まりました。

折角用意した発表内容を社内だけに留めておくのは勿体無いのでQiitaにも転載します

ゆくゆくはTechBlogを作りたいなという構想もあります。

LTは2018年12月3日に行い資料はその時点での情報となります。

「概要」から下が社内LTに用いた資料となります。

ただ、社内LTという性質上、企業秘密も含まれているため一部資料の修正を行っています。

資料外でも口頭で補足している部分がありますが、当たり前の内容だったり出典が曖昧だったりしているので今回は割愛します。

「知りたいこと」という項目は、次回のLTのネタの提供(LTのネタに困ってたらこれはどう?みたいな)や社内での議論の提起のために設けています。

なので、Qiitaの読者の方には関係ありませんが一応そのままにしています。

LTを行うたびに随時更新していきたいと思います。

第一弾: 【社内LT用資料転載】PHP7移行概要

第二弾: 【社内LT用資料転載】そうだゴルフをしよう⛳


概要

弊システムでは、サーバーサイドの処理を主にPHPで書いています。

新しい商用環境では現行のPHP5.5.xからPHP7.2.xにPHPのバージョンを上げます。

PHPのバージョンアップ自体はyumなどで行なえます。

ただ、新しいPHPのバージョンでは、古いバージョンで使えていた機能が一部利用できなくなったり非推奨になっているのでソースコード側の修正も必要になります。

今回は、以下について話したいと思います。

- PHPのバージョンについて

- PHP7に移行するメリット

- ソースコード側での対応状況

- 移行を便利にするツールの紹介

- 知りたいこと


PHPのバージョン


各環境のバージョン

各環境のバージョンは以下になります。


  • 商用環境:5.5.25

  • 新商用環境:7.2.11


PHP7までの道のり

PHP7への道のり.png


小ネタ


  • PHP6はどこへ消えた?

    PHP5.6のつぎはPHP6.0を飛ばしていきなりPHP7.0になっています。

    PHP6は開発プロジェクトが頓挫したためリリースされなかったようです1 2


  • PHP7.3は今週リリース?

    PHPの7.3は12月6日あたりにリリースされる予定だそうです3 4



PHP7に移行するメリット


  • 処理速度が早い

    PHP5に比べて2倍ほど処理が早くなりました5


  • サポート対象になる

    PHP5.5はアクティブサポートとセキュリティサポートの期間が終わっています6

    通常PHPの各バージョンはリリースされてから2年間のアクティブサポートとプラス1年間のセキュリティサポート期間があります。

    セキュリティサポート期間をすぎるとセキュリティパッチなどが公開されないバージョンとなります。


    ちなみにPHP7.0のサポートは本日(12月3日)終了しました。


  • 新しい機能が利用できる

    全てを見れていないので一例だけ紹介します。

    PHP7.0から宇宙船演算子という演算子が追加されました。


    宇宙船演算子は、二つの式を比較するために使うものです。 $a$b より大きい場合は 1、 $a$b が等しい場合は 0、 $a$b より小さい場合は -1 をそれぞれ返します7 8


例)

echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1


ソースコード側での対応状況


判明分(対処済み)


  • Excelが出力できない


    Excel出力に用いているPHPExcelというライブラリにPHP7に対応していない箇所があった9
    PHP7.0からはcontinue(break)をループとswitch文以外で使用すると構文エラーになります。
    そもそも不要な処理なので削除することで対応しました。


判明分(未対処)


  • 暗号化処理


    mcrypt_encrypt()を用いているがPHP7.1.0で非推奨になり、7.2.0では削除されました。

  • 設定値を取得する処理


    PDOクラスのgetAttribute()関数とPDOクラスを継承したクラスにあるgetAttribute()関数で引数の数が違うためにWarningが出ている。
    ただ、getAttribute()関数自体はPHP5.1.0からあるみたいなので10、PHPのどこかのバージョンでタイミングで引数が違う場合Warningを出す仕様になったと思われます。


移行を便利にするツールの紹介


php7cc

php7cc11 12というツールを用いれば、ソースコードを解析してPHP7に対応しているか判定してくれます。

注意点として、PHP7.0までは判定してくれますがPHP7.1とPHP7.2についてはこの方法が使えません。

あとPHP7.0についても全て網羅している保証はありません。

全ファイルについては試していませんが、PHP4のコンストラクタ宣言13などPHP7で非推奨になったものを使用している箇所がありました。


知りたいこと


  • PHPの新機能

  • バージョンのアップデート
    ライブラリにしてもそうだが、どれくらいの頻度でアップデートするのが最適なのか。