php8.5で変わったことを調べてみた

アイキャッチ画像

phpのバージョンが変わると新機能の実装やこれまで使用できていた関数の非推奨、廃止といったことに直面します。

バージョンアップ時には既存コードのままでは動作しなくなる場合もあるので対応が必要になります。

さて現時点での最新ver.である8.5ではどのような変更があったのでしょうか?

パイプ演算子

これまでは複数の文字列置換などで以下のような処理が必要でした。

例:電話番号、郵便番号を半角かつハイフンなしに置換

新たに導入されたパイプ演算子を利用すると以下のように記述可能になります。

複雑な入れ子が解消されて見やすいコードが実現します。

クローン時のプロパティ更新

clone() 関数に連想配列を渡すことで、オブジェクトのクローン時にプロパティを更新することができるようになりました。

例:色を定義して半透明に指定する

これまでは以下のように記述していました。

clone()関数を利用すると以下のように指定可能です。

アルファ値のみ連想配列で渡すだけなのでシンプルですね。

URI拡張モジュール

従来のURI解析は以下のように行っていました。

Uriクラスが利用可能になりました。

#[NoDiscard] アトリビュート

このアトリビュートを関数に追加すると、戻り値が利用されたかを PHP がチェックし、されていなければ警告を出します。 

php8.5からは次のようになります。

voidではない関数で戻り値を適切に使用しているかどうかが分かるようになりました。

非推奨となったもの

非正規な型名の使用

正規化されていない型名 (boolean), (integer), (double), (binary) が非推奨になりました。

正しくは次の型名を使用します。

(bool), (int), (float), (string) 

booleanやintegerは間違えやすいですね。

特にLaravelのModelの型キャストではboolean、integerと指定するので混同しないように気をつけたいです。

Case文の末尾にセミコロンの使用

正しい記述

非推奨となった記述

正直Case文の末尾にセミコロンが指定できたということは初耳でした。

おそらく修正が必要なケースは少ないでしょう。

array_key_existsの$keyパラメーターへのnullの使用

現状はまだ使用可能ですが非推奨になります。

nullの代わりに空文字でチェックする必要があります。

配列以外の変数を配列として扱うこと

以下のような場合warningが出ます。

明らかにバグ的な記述なので、逆になぜいままで出なかったのか謎です。

まとめ

廃止される関数は真っ先に修正しないといけませんが、非推奨となっているがまだ使用可能なものであっても将来的に廃止されるのでなるべく早い対応が必要です。

新しいバージョンがリリースされるたびに変更点の情報はチェックするようにしましょう。