PHP 8.1から新機能で生まれ変わる?非推奨の機能も解説
thumb_php8.1_01
PHP 8.1から新機能で生まれ変わる?非推奨の機能も解説
アンドエンジニア編集部
2021.12.22
この記事でわかること
PHP 8.1は2021年11月25日にリリースされたPHPの新バージョン
PHP 8.1は非同期処理の簡略化やEnums型の追加などの機能が追加された
PHP 8.1で非推奨となる機能もいくつかあるので今のうちにコードの見直しを

PHP 8.1とは何か?

img_php8.1_01

PHP 8.1とは何かについてまずは解説します。そもそもPHPはどのような言語なのか、従来のPHPとPHP 8.1は何が違うのか詳しくみていきましょう。

PHPとは?

PHPはWebアプリ開発に使われるインタープリタ型のプログラミング言語です。プログラミング未経験者でも使いやすい言語として有名であり、多くのプログラミングスクールでは初心者にPHPを学ばせています。一方、他の言語の経験がある上級者からは「処理が遅い」「使いにくい」と言われることも多い言語でした。

しかしPHPは何度もアップデートを重ねており徐々に機能が改善されていったので、今ではそういった意見はほとんど聞かなくなりました。今後PHPはWebアプリ言語としてさらに伸びていくと推測されます。

PHPとは一体何か?他のプログラミング言語と異なるポイントを解説!

PHP 8.1は従来と何が違う?

PHP 8.1は、2021年11月25日にリリースされたPHPの新バージョンのことです。PHP 8.1ではSymfonyのデモアプリケーションで23%の高速化を実現し、更にWordpressで3.5%の高性能化を実現しました。更に、非同期処理の簡略化やEnum型の追加などソースコードの可読性アップに貢献する多くの機能が追加されました。

PHP 8.1の新機能

img_php8.1_02

PHP 8.1には従来のPHPにはない機能がいくつか追加されています。開発現場でPHPを扱う方はこれらの新機能について知っておくべきでしょう。ここではPHP 8.1の新機能の一部を紹介します。

【参考】:PHP: 新機能 - Manual

Fibers導入による非同期処理の簡略化

PHP 8.1にはFibersという非同期処理を行う仕組みが導入されました。非同期処理とは1つのタスクを実行している際に他の複数のタスクを実行できる方式のことで、活用することで実行時間を短縮することが可能です。たとえば、スクレイピングする際にHTTPリクエストを複数サイトに同時に投げ、まとめてデータを取得することができます。

PHPでは今まで非同期処理を行うことが難しく、exec関数を使って類似的に行うなどが主流でした。今回Fibersが導入され、非同期処理をPHPでも簡単に書くことができるようになりました。

Enum型の追加

Enum型が追加されたのも大きな変更点と言って良いでしょう。Enum型はPythonなどにはありますが、PHPにはこれまで搭載されていませんでした。これまで実装を長らく試みていたのですがなかなか実現されず、今回満を持しての実装となります。Enum型を使うことで、以下のように定数をまとめて定義することができコードの可読性が上がります。

enum Phone
{
case OFFICE;
case HOME;
case SCHOOL;
case STATION;
}
print(Phone::OFFICE);

8進数の整数リテラルのプレフィックス指定

PHP 8.1で「8進数の整数リテラルのプレフィックス指定」が可能になりました。今まではコード上で8進数を書く場合このようになりました。

<?php
$num = 010; // 8進数の8
?>

ただ、この書き方では分かりづらさがありました。今回の改良で明示的に0oや0Oを指定可能になっています。

<?php
$num = 0o10; // 8進数の8
?>

これまでも16進数などはプレフィックス指定が可能で、8進数だけが不可能だったのですが、今回で改善されました。

文字列をキーの場合にもアンパックが可能

「アンパック」とはリストやタプルなど複数の要素を持つものを分解し、他の変数に代入することです。アンパック機能を使うことで配列同士のマージができるようになります。

$arr1 = [1 => 1, 2];
$arr2 = [1 => 3, 4];
$array = [...$arr1, ...$arr2];

上記のようにキーが数値の場合はアンパック可能でしたが、キーが文字列の場合はこれまでできず、PHP 8.1にてできるようになりました。たとえば以下のような記述が可能です。

$arr1 = ['num1' => 1, 2];
$arr2 = ['num2' => 3, 4];
$array = [...$arr1, ...$arr2];

CURLStringFileクラスが追加

PHP 8.1で新しく「CURLStringFileクラス」が追加されました。CURLStringFileを使うとファイルのアップロードを変数を使って直接行えるようになります。 

<?php
$TestFile = new CURLStringFile($data, 'test.txt', 'text/plain');
curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => TestFile]);
?>

PHP 8.1から推奨されなくなる機能

img_php8.1_03

続いて、PHP 8.1から推奨されなくなる機能について解説します。PHP 8.1にアップデートされたことで、今まであまり使われていなかった機能や、使用することでトラブルの種になりがちな機能が非推奨になりました。PHP 8.1で非推奨になった機能はPHP9では削除されて使えなくなります。そのため、PHPを活用している企業は今のうちに非推奨の機能を使っているコードを書き換える必要があります。

【参考】:PHP: PHP 8.1.x で推奨されなくなる機能 - Manual

date_sunsetとdate_sunriseの使用

「date_sunset」と「date_sunrise」という関数がPHPにはありますが、これら2つは非推奨になります。date_sunsetは指定した日付および場所についての日の入り時刻を返し、date_sunriseは指定した日付および場所についての日の出時刻を返す関数です。

PHP 8.1では新しく「date_sun_info関数」が登場します。date_sun_info関数は日の出・日の入り時刻を含めた日時情報を総合的に取得できる関数なので、PHP 8.1以降はこちらを使うことが推奨されています。

floatからintへの強制変換

「float」から「int」への強制変換は非推奨となりました。強制変換すると値が勝手に変わってしまいトラブルの種になるためです。たとえば、下記のように配列のキーにfloatを使うと自動的にint型になりますが、このような書き方は非推奨となります。

<?php
$arr = [2.5];
?>

PgSQLに接続リソースを渡さない

「pg_query」などの関数に接続リソースを渡さないのも非推奨になります。pg_queryはクエリを実行する関数ですが、今までは下記のようにデータベースを指定しなくても動かすことが可能でした。

<?php
pg_query($query);
?>

今後はきちんと下記のようにデータベースを指定する必要があります。

<?php
pg_query($cnctn, $query);
?>

ctype関数に文字列以外を渡す

「ctype関数」は引数に文字列を指定することで文字列の状態を判定するものです。たとえば、ctype_alnum関数は指定した文字列が英数字がどうか調べることができ、ctype_digitは数字がどうか調べることができます。

今まではctype関数に数値も渡すことが可能でした。数値を渡した場合、文字列ではなくASCII値として認識されます。たとえば、ctype_digit("10")と書くとTrueを返しますが、ctype_digit(10)だと「10」がASCII値になるためFalseを返します。

整数型と文字列型で挙動が異なるのは良くないため、int型を引数にするのは非推奨になりました。数値を引数とする場合は、必ず文字列にキャストする必要があります。

objectに対してkeyなどを呼び出す

keyやnext、current、prev、reset、entなどの関数は配列ポインタの操作に使える関数であり、今まではオブジェクトも受け取ることが可能でしたが、今回の改良で非推奨となりました。これらの関数を使っている箇所は確認する必要があるでしょう。

PHP 8.1の特性を把握し早めに対応を行うべき

img_php8.1_04

本記事では、PHP 8.1について解説しました。PHP 8.1の新機能や非推奨となる機能がお分かり頂けたかと思います。PHP 8.1のアップデートによって一部のみ機能が変更されるので、PHPを使っているシステムが社内にある場合は、コードの書き換えが必要となる場合もあるでしょう。PHP 8.1の特性を把握し早めにコード修正のスケジュールを組むことが重要です。

気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT