PHP8の新機能まとめ|初級試験の出題範囲
PHP8技術者認定初級試験は「PHP8」対応の試験のため、PHP8で追加された新機能も出題範囲に含まれます。 旧バージョンで学習していた方が見落としやすいポイントを中心にまとめました。
① 名前付き引数(Named Arguments)
引数名を指定して値を渡せる機能です。デフォルト値のある引数を飛ばして、 後ろの引数だけを指定したい場合に便利です。
function createUser(string $name, int $age = 20, string $role = 'member') {
return "{$name}({$age}歳・{$role})";
}
// 名前付き引数:途中の引数を省略して指定できる
echo createUser(name: '山田', role: 'admin');
// 出力: 山田(20歳・admin)
② コンストラクタプロパティ昇格
コンストラクタの引数にアクセス修飾子(privateなど)を付けるだけで、
プロパティの宣言と代入を同時に行えるようになりました。
// PHP7以前の書き方
class UserOld
{
private string $name;
public function __construct(string $name)
{
$this->name = $name;
}
}
// PHP8:コンストラクタプロパティ昇格で簡潔に書ける
class User
{
public function __construct(private string $name)
{
}
}
③ Union型
int|stringのように、|で複数の型を並べて
「いずれかの型を許容する」ことを明示できます。
// Union型:複数の型のいずれかを受け付ける
function formatId(int|string $id): string
{
return "ID-{$id}";
}
echo formatId(101); // 'ID-101'
echo formatId('A01'); // 'ID-A01'
④ match式
switchと似た条件分岐ですが、厳密比較(===)で判定され、
breakが不要で、式として値をそのまま返せます。
詳しくは制御構文の解説記事で解説しています。
⑤ nullsafe演算子(?->)
?->を使うと、オブジェクトがnullの場合に
エラーを発生させず、式全体がnullとして評価されます。
プロパティ・メソッドの連続アクセスがシンプルに書けます。
// nullsafe演算子:オブジェクトがnullなら例外を投げず、式全体がnullになる
$city = $user?->address?->city;
// PHP7以前は下記のようなnullチェックが必要だった
$city = $user !== null && $user->address !== null
? $user->address->city
: null;
⑥ JIT(Just In Time)コンパイラ
実行時にコードを機械語へ変換して実行速度を向上させる仕組みです。 コードの書き方が変わるものではありませんが、PHP8の目玉機能の名称として問われることがあるため、 「JITコンパイラ=実行速度の向上」という関連付けだけは押さえておきましょう。