【PHP振り返り】大変だったPHP7移行と、PHP4から8までの進化史

こんにちは。もうすっかり暑くなって一気に夏に突入していくんだなと感じてきました。
つい先日、受託案件で「PHP5時代のシステム」をPHP8系へとバージョンアップする仕事がありました。
PHP5を調べてみると5.0は2004年にリリースされた代物で、もう20年程も前のシステムなんですね。
私はPHP4系から触り始めたのですが、思い返すとPHPのバージョンが変わるたびに言語がどんどん進化していきました。
今回はそんな進化について、私が現場で感じたことを追っていきたいと思います。

懐かしいバージョン

PHP4時代:「なんちゃってオブジェクト指向」と“おおらか”な文化

2000年代の中盤くらいでしょうか。PHP4は「気軽にWebサイトを動かせる言語」として急速に広がっていきました。今思えば、クラスや継承は“なんちゃって”な実装で、実体はほぼ配列&関数の集合体(だった気がしています)。
文字コードもSJISやEUCが入り乱れて苦労した印象。
「なんとなく動く」
そんな“おおらか”な現場が多かったように感じます。

PHP5:本格オブジェクト指向と「企業案件も任せられる」時代へ

そんな“おおらか”な現場が2004年、PHP5の登場で現場の空気が一変しました。
・本格的なオブジェクト指向(OOP)の導入
・try-catchによる例外処理の追加
・PDOによるDBアクセスの標準化
__construct()などのマジックメソッドの実装

「PHPでも“ちゃんとした”設計ができる!」という雰囲気になり、CakePHPやZend Frameworkなど、有名フレームワークがたくさん生まれました。
受託や企業案件でも“本気で使える”言語に進化していきました。

PHP7:「レガシー一掃」

PHP6は幻のバージョン。Unicode対応が頓挫してスキップされたようです。
紆余曲折があった(であろう)PHPですがバージョン7への更新はかなり大きなものとなっています。
・mysql_*系関数の完全廃止
・型やエラー処理の厳格化。
・内部エンジン刷新による高速化
・古い関数(ereg, split, eachなど)の消滅

mysql_*系の廃止と型の厳格化は、今まで“なんとなく”動いていたものが許されなくなったと感じられました。Warningで済んでいたミスがFatal errorで強制終了させられるというのも本アップデートからです。
mysql_系をmysqli_系に直そうとした際に、各関数での引数の違いが多いのも苦労させられた記憶があります。

PHP8へ

・JITコンパイラの導入による高速化
・アロー関数などのコーディングの快適さが一段と進化
・型の厳格化はさらに進み、「あいまいな書き方」は完全にNGに
・文字コードは完全UTF-8前提
いまやPHPは、昔ながらの“なんとなく”動く言語ではなく、しっかりとした大規模開発や運用もできる言語になっています。

まとめ

長らくPHPに携わってきたエンジニアとしては、あの頃のおおらかさも今の厳しさも楽しく感じます。今後のPHPにも期待しつつ、「PHP5時代のシステム」には20年間お疲れ様でしたと感じています。
※PHPのバージョンアップはセキュリティの観点から2年単位で行っていきましょう