【PHP8を試してみた!】PHP8の新機能まとめ

PHP

PHP8で追加された新機能を試してみました。
詳細があるものに関しては、それぞれの記事へリンクを貼っています。

本記事では、PHP8で追加された機能の簡単な紹介と試してみた記事へのリンクを貼っています。
PHP8の機能について公式ドキュメントはこちらです。

名前付き引数(Named arguments)

PHP8のdocker環境の作成と名前付き引数を試しています。
名前付き引数は、メソッドや関数に引数名を書いて渡すようにすることができます。

例えばwhoAmIという関数がある場合は、whoAmI(name: "太郎", age:18)のようにラベルをつけて渡します。
詳しくはこちらです。

属性(Attributes)

他の言語でお馴染みの属性がPHPでも書けるようになりました。

コンストラクタのプロパティ省略(Constructor property promotion)

クラスでプロパティの値を定義するときに、コンストラクタに初期値と一緒に書いて、省略して定義できるようになりました。

Union型(Union types)

複数の型をプロパティやメソッドの戻り値に設定できるようになりました。

match式(Match expression)

match式というswitch文に似た構文が使えるようになりました。
match式では値が左の条件にマッチしたら、そのまま右に定義している返却値を返してくれます。

Nullsafe演算子(Nullsafe operator)

他の言語でもサポートされている、nullsafeな感じが使えるようになりました。
今までは下記のようにnullでなかったら、取るようにするように書いていました。

$address =  null;

if ($session !== null) {
  $user = $session->user;

  if ($user !== null) {
    $address = $user->getAddress();
  }
}

PHP8から、このように?でnullチェックができます。
nullでなかったら、その値を返し、nullの場合はnullが返ってきます。

$address = $session?->user?->getAddress();

このコードは公式のこの辺に載ってるものを省略しました。

Saner string to number comparisons

数値と文字列を比較するときの判定が変わりました。

下記の場合はこれまで(PHP7)と同じです。

0 == "0" // trueになる
0 == "0.0" // trueになる
42 == "   42" // trueになる

下記の場合の判定がこれまでと変わるようです。
trueになっていたのが、falseに変わりました。

0 == "foo" // falseになる
0 == ""    // falseになる
42 == "42foo" // falseになる

今まではtrueだったんですね…
詳細はこの辺に書いています。

Consistent type errors for internal functions

内部関数でWarningを出していたエラーが、統一されてErrorのExceptionがスローされるようになったようです。

コメント

タイトルとURLをコピーしました