PHP7系は、7.0の登場によってパフォーマンス面や言語仕様の改善が大きく進展しました。
その後のマイナーバージョンアップ(7.1、7.2、7.3、7.4)でも、型システム強化や便利な関数追加など、業務で役立つ機能が数多く導入されています。
本記事では、PHP7.0から始まるマイナーバージョンでの主要な新機能・変更点を、実務で活用しやすいものを中心にわかりやすく解説します。
最後にあまり使われない機能やマイナーな変更点をリスト形式でまとめますので、全体像を把握する際の参考にしてください。
PHP7.0で注目したい新機能・変更点
パフォーマンス改善
PHP5系と比較してPHP7.0は大幅なパフォーマンス向上を果たしました。
多くのアプリケーションでコードを書き換えずとも速度改善が期待できるため、プロジェクト全体のレスポンスが向上し、サーバーコスト削減にもつながります。
スカラー型宣言と戻り値の型宣言
PHP7.0では引数と戻り値に型を指定することができるようになりました。string
、int
、bool
、float
などのスカラー型を用いて、関数やメソッドのインターフェイスを明確化できます。
これにより、型の取り扱いが明瞭になり、バグを事前に防止しやすくなります。
function addNumbers(int $a, int $b): int {
return $a + $b;
}
echo addNumbers(2,3); // 5
無効な型変換時のエラー強化
不正な型変換や関数への不適切な引数に対してはTypeError
がスローされるようになりました。
これにより、問題点を早期に特定し、コード品質を高めやすくなります。
null合体演算子(??
)
$var = $value ?? 'default';
のように、変数がnull
または未定義の場合にデフォルト値を返す構文が導入されました。
これにより、三項演算子やisset()
の組み合わせを簡潔に書けるようになり、可読性も向上します。
宇宙船演算子(<=>
)
$a <=> $b
で$a$と$b$を比較し、$a$が小さければ-1、等しければ0、大きければ1を返します。
並び替えやカスタムソートを書く際に有用です。
Unicodeコードポイントエスケープ
\u{...}
構文でUnicodeコードポイントをエスケープできます。
これにより、文字列中に特殊な文字を容易に書き込めるようになりました。
PHP7.1で注目したい機能・変更点
Nullable型宣言
?string
のように、指定した型またはnull
を受け入れることが可能になります。
これによって引数や戻り値がnull
を許容することを明確化でき、コードを読む際に期待する値がはっきりします。
function getUserName(?string $name): string {
return $name ?? "Guest";
}
Void型戻り値
void
を戻り値として宣言し、関数が値を返さないことを明示できます。
これで関数の仕様が明確になり、IDE補完やレビュー時の理解が深まります。
Class定数の可視性指定
クラス定数にpublic
、protected
、private
を指定できるようになり、定数にもアクセス制御を行いやすくなりました。
PHP7.2で注目したい機能・変更点
object
型ヒント
引数や戻り値にobject
型を指定できるようになりました。
これにより、特定のクラスではなくオブジェクトであることを前提に柔軟なコード記述が可能です。
Argon2ハッシュサポート
password_hash()
がArgon2アルゴリズムをサポートし、よりセキュアなパスワードハンドリングが可能になりました。
これにより、認証周りの安全性がさらに向上します。
PHP7.3で注目したい機能・変更点
is_countable()
関数
count()
でwarningが発生する可能性のある値に対して、事前にis_countable()
で確認できるようになりました。
これにより、可変な入力を扱う際の条件分岐がシンプルになります。
if (is_countable($data)) {
echo count($data);
}
array_key_first()
とarray_key_last()
配列の最初と最後のキーを直接取得できる関数が追加されました。reset()
やend()
を経由する必要がなくなり、コードが明確になります。
トレーリングカンマ許容
関数呼び出し時の引数リスト末尾にカンマを置けるようになりました。
これにより、引数リストを編集する際の差分管理が容易になり、コードレビュー時にもスムーズです。
PHP7.4で注目したい機能・変更点
型付きプロパティ
クラスプロパティに型宣言が可能になりました。
これで、プロパティへ不正な値が代入されることを防ぎ、クラス設計がより堅牢になります。
class User {
public int $id;
public string $name;
}
アロー関数 (fn
)
短い無名関数をより簡潔に書けるアロー関数が追加されました。
外部スコープの変数をuse
なしで参照でき、ラムダ式が多用されるコードで特に有用です。
$array = [1,2,3];
$squared = array_map(fn($n) => $n * $n, $array);
Null合体代入演算子(??=
)
??=
を使うと、対象がnull
の場合のみ値を代入する処理を簡潔に記述できます。
phpコードをコピーする$data['count'] ??= 0;
Preloading(プリロード)
OPcacheを利用してアプリケーション起動時にコードを事前読み込みできる機能です。
フレームワークやライブラリをプリロードすることで、本番環境での初回リクエスト時のオーバーヘッドを削減し、パフォーマンス向上が期待できます。
その他のあまり使わない変更点リスト
- PHP7.0以降
- Unicodeコードポイントエスケープ以外の一部マイナーな構文改善
- PHP7.1以降
multi-catch
で複数の例外型をまとめてキャッチ可能
- PHP7.2以降
count()
の非countableな値へのカウント時ワーニング強化sodium
拡張が標準同梱され、安全な暗号化操作が可能
- PHP7.3以降
list()
構文の柔軟性向上
- PHP7.4以降
- FFI(Foreign Function Interface)によるC関数呼び出し対応
- Reflection関連機能の改善
まとめ
PHP7.0以降のマイナーバージョンアップでは、パフォーマンス改善から始まり、型システム強化や便利な演算子・関数追加など、多角的な進化が見られます。
スカラー型宣言やnullable型、型付きプロパティといった型関連機能はコードを堅牢かつ明確にし、??
や??=
、アロー関数、array_key_first()
などのシンタックスシュガーは日常的なコーディングを効率化します。
また、PreloadingやArgon2対応など、セキュリティやパフォーマンス、可読性の全方位で恩恵を受けられる要素が揃っています。
これらの機能を適宜取り入れることで、プロジェクト全体の品質向上や開発効率アップにつなげることができます。
ぜひ、この機会にPHP7系で追加された機能を活用して、より洗練されたPHP開発に取り組んでみてください。