PHP8のアップデート内容とは?新機能や切り替え方法について解説
みなさんこんにちは。Wakka Inc.ベトナム拠点のテクニカルマネージャーの鍋山です。
今回はPHP8に関する情報について紹介したいと思います。
ちなみにカンタンにPHPの歴史からお話しすると、元々PHPはラスマス・ラードフが個人的に開発していたCGIプログラムでした。それが進化を遂げ、データベースへのアクセス機能が追加された上で1995年にはじめて世の中に登場したのです。そして、アップデートが繰り返され現在ではPHP8が使われています。
PHP7からPHP8にアップデートされましたが、今でも古いバージョンでWebサイトを運営している人もいるのではないでしょうか。また、バージョンアップ情報を知り、今から新バージョンへ切り替えを検討している方も少なくないでしょう。
PHP8は以前のバージョンよりも新機能がたくさん追加されており、アップデートすればプログラミングがしやすくなったり、以前なら発生するエラーを回避できたりします。そのため、切り替えるメリットは十分にあるでしょう。
それではPHP8のアップデート内容や新機能、切り替えの手順について解説していきます。
●開発リソースの不足にお悩みなら●
>>>Wakka.Inc独自の海外子会社設立サービスがおすすめ!
無料でサービス資料をダウンロードできますのでぜひご覧ください。
PHP8のアップデート内容について
2020年11月27日にメジャーバージョンとしてPHP8がリリースされました。そして、2021年7月現在においては、最新バージョンが8.0.8となっています。
具体的には、下記のような変更が加えられました。
- 仕様の見直しと拡張
- エラー処理の改善
- 新しいコンパイラーの導入
それぞれの内容について詳しくチェックしていきましょう。
仕様の見直し及び拡張
1つ目は言語仕様の見直しと機能拡張です。例えば、比較演算子の挙動が変更されたり、新しいPHP関数が追加されたりします。詳しい新機能については、後述しますが、これによって今までよりもソースコードがシンプルになるため、可読性の向上を期待することができるでしょう。
エラー処理の改善
2つ目は、エラーがより具体的に表示されるようになっていることです。例えば、警告や通知として扱われていたものが、バージョン8から独立したエラーとして扱われるようになります。すべての通知や警告がエラーになるわけではありませんが、エラーとして扱われるものが多くなるのです。
また、エラー制御演算子の@は、致命的なエラーに分類されます。また、デフォルトのエラーレベルが変更されるため、今まで無視して進めることができていたものがバージョン8からは難しくなるでしょう。
JITの導入
3つ目はJITが導入されたことです。
JITとは、Just In Timeの略称で、実行速度の高速化を図るコンパイラーのことです。実際に、JITが導入されることで、処理速度が以前よりも1.5倍〜2倍まで速くなるといわれています。その理由は、言語の翻訳の仕方が異なるからです。
以前のバージョンは、リクエストの度にソースコードを読み取り、opcodeに変化しその後、順番に処理を実行して最後まで到達したら破棄するという流れでコンパイルが行われていました。このような翻訳方式をインタープリタ型といいます。変化したopcodeは最後まで到達するとすべて破棄されるため、同じリクエストが来てもはじめからコードを読み、opcodeに変換しなければなりません。同じ流れをもう一度踏まなければならないため、処理速度が遅いです。
一方、JITはソースコードをopcodeに変換しますが、そこからネイティブ言語に変えていきます。そして、同じリクエストが発生したときは、以前翻訳したネイティブ言語をそのまま実行するので、はじめから変換する必要がありません。これにより速度が向上するのです。
速度の向上は、ユーザービリティ向上につながるためUX観点でもメリットが大きいと言えます。そのため、JITの魅力に惹かれてPHP8に切り替える方も少なくありません。
PHP8の具体的な新機能6選
次に、PHP8の新機能についてご紹介します。主要な機能を6種類ピックアップしましたので、ぜひ参考にしてみてください。
matchが新しい予約語になり、match構文が登場
1つ目は、matchが予約語になることです。関数名でmatchを使用するとエラーになります。その理由は、PHP8からmatch構文が導入されるからです。
match(制約式){複数の条件式};
matchは、switch文に似ている構文になります。switch文との違いは、比較する値の正確性です。switch文は厳密にお互いの値を比較しないのに対して、matchは型と値の両方が一致すると値を返します。
str_contains関数
str_contains関数もPHP8から導入された新機能です。以前のバージョンまでは、文字列の有無を確認するときに、strpos関数を使用していました。str_contains関数の登場により、比較演算子を使用しなくてもいいため、ソースコードがすっきりとした印象です。
[PHP7]
$txt = ‘abcde’
if(strops($txt, ‘abc’ ) !== false){
echo ‘検索した文字が含まれます。’;
}else{
echo ‘検索した文字が含まれません。’;
}
[PHP8]
$txt = ‘abcde’
if(str_contains ($txt, ‘abc’ )){
echo ‘検索した文字が含まれます。’;
}else{
echo ‘検索した文字が含まれません。’;
}
名前付き引数
名前付き引数ができるようになりました。関数の引数に何を設定すればいいのかわかるように、引数の名前を指定できるようになったのです。Pythonの仕様と似ているため、Pythonで開発をしたことがあるエンジニアならすぐに慣れることができるでしょう。
[PHP7]
str_contains(‘abc’, ”);
[PHP8]
str_contains(haystack: abc, needle: ”);
どのような型でも代入できるmixed
代入する型が定められていないmixedを使用できることです。通常は、Stringなど変数を宣言するときに代入すべき型を決めます。しかし、mixedはどのような型でも代入することが可能です。mixedを使用することでプログラマに正確に指定できなかったことやあえて型を明確に定めていないことを主張することができます。ちなみに、バージョン8以前から使用されているunion型と同じです。
[PHP8]
public function foo(mixed $value): mixed {}
Attributes
Attributesは、メタデータを埋め込んで記述できる実行力のある方法です。ほかのプログラミング言語ではお馴染みの方法となっており、PHP8から導入されることが決まりました。
[PHP8]
#[Attr1(“Bar”)]
コンストラクターのプロモーション
コストラクターの引数をオブジェクトのプロパティに昇格させられるようになりました。コンストラクターを定義する際、引数にプロパティを代入したあと、何もしないことは珍しくありません。この場合、短縮記法でコードを記述できるようになったのです。
[PHP8]
class Example {
public function __construct(protected int $x, protected int $y = 0) {
}
}
【おすすめ資料】海外開発拠点の設立を検討されていますか?
【保存版】成長企業が導入するWakkaのラボ型開発
>ラボ型開発を進めるポイントとWakka inc.の『独自の海外子会社設立サービス』を紹介した資料です。ぜひあわせてご覧ください。
PHP8にアップデートする前にやっておきたい準備と検証
このようにPHP8はメリットが豊富で、機能性も高いため、アップデートに対してポジティブな印象を持たれる方も少なくないでしょう。しかし、仕様の変更なども含まれるため、アップデート前に準備や検証を行うことは非常に重要です。ここでは、どのような準備や検証が必要なのか解説します。
エラーの修正
エラーを修正することです。PHP8にアップデートするとnoticeエラーがwarningになったり、undefinedのエラーが多数発生したりします。コードを修正せずに、PHP8にアップデートしてしまうとエラーが発生してサイトの機能が正常に動作しなくなるため、非奨励のコードはすべて変更することが求められるでしょう。
構文エラーの修正
2つ目は、構文エラーの修正を行うことです。PHP8からimplode構文がエラーになるため、implode構文がある箇所をすべて修正する必要があります。また、文字列の判定に関してもnullはtrueからfalseに変わるため、文字列の比較判定をしている箇所も修正する必要があるでしょう。
開発サーバーを立てて十分に検証する
3つ目は、開発サーバーを立てて十分な検証を行うことです。非奨励コードを修正した場合でも見落としなどがあるかもしれません。また、サーバーでインフラ監視ツール等を使用している場合、PHP8に対応していないと使えなくなるので注意が必要です。開発サーバーを立てて十分に検証することで、アップデート後のトラブルをできるだけ少なくすることができるでしょう。
PHP7からPHP8に切り替える3つの手順
PHP8を使用するためには、既存のPHPのバージョンからPHP8にアップデートする必要があります。今回はCentOS7、PHPバージョンは7.xの環境を例に解説していきます。
1.まず、PHP8をインストールする前に、Remiリポジトリを追加する必要があります。そのため、下記のコマンドを実行してリポジトリを追加してください。
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
2.リポジトリを追加することができたら、yumコマンドでインストールします。
yum install -y –enablerepo=remi-php80 php which
3.ちなみに、インストールするものをすべて指定したいときは、下記のコマンドを実行してリスト表示の中からインストールしたいものを選択してください。
yum list | grep php80
4.phpのインストール場所は以下のコマンドで確認できます。
which php
5.また、現在のバージョンを確認するときは、下記のコマンドを実行してください。
php -v
6.以上で、PHP7からPHP8にアップグレードする手順は終了です。
PHP8のアップデートは戦略的に進めよう
今回は、PHP8のアップデート内容や新機能、PHP7から切り替える方法について解説しました。mixedや名前付き引数など、言語仕様が大幅に変更されているだけでなく、JITの導入により速度も向上しています。そのため、以前のバージョンからPHP8に切り替えれば、プログラミングがしやすくなったり、ユーザービリティが向上したりするでしょう。
しかしながら開発言語のメジャーアップデートは既存のサービスに影響を与える可能性があるため、経験のあるメンバーと余裕を持って戦略的に取り組む必要があります。
Wakka Inc.では開発コンサルティングに加えて、経験豊富なエンジニアチームによるオフショアラボ型開発や海外開発拠点設立のサポートをしています。
PHPのメジャーアップデート対応や継続的な運用保守にお困りの方は、ぜひ一度以下リンクからお問合せください。
【おすすめ資料】海外開発拠点の設立を検討されていますか?
【保存版】成長企業が導入するWakkaのラボ型開発
>ラボ型開発を進めるポイントとWakka inc.の『独自の海外子会社設立サービス』を紹介した資料です。ぜひあわせてご覧ください。
日系オンラインリサーチ会社のCTOとしてベトナムチームを立ち上げ、Wakka Inc.のテクニカルマネージャーとして参画。現在はベトナム拠点で開発チームの標準化や社内のインフラ管理・ITプロジェクト統括をやっています。モットーは『みんなで頑張りましょう』