PHPの交差型について

PHPの認定資格取得を目標にしています、しましまです。

今回は、PHP8 から追加された交差型について紹介します。

交差型とは

交差型の説明として公式では以下のように解説されています。

交差型 は、宣言した複数のクラス型を(単一ではなく) すべて満たす値を受け入れることができます。 交差型を構成する個別の型は、& 記号で結合します。 よって、型 TUV の交差型は T&U&V と書きます。

これだけ見ても私はちんぷんかんぷんでしたので、コードを見てみます。

public function hoge(ParentAClass && ParentBClass $childObject)

上記は、Parent1Class と Parent2Class を継承したクラスのオブジェクトのみ受け付けるという関数です。

条件となる親クラスを「&」でつないでいます。この場合は、どちらも満たすクラスのオブジェクトでないとエラーとなります。

私が初めて交差型を見たときに思ったのは「if 文でよくない?」でした。

交差型を使うメリット

交差型を採用するメリットとしては以下の点があると考えています。

  1. 視認性がよくなる
  2. 保守性があがる

メリット①視認性がよくなる

交差型が追加される前は、以下のように if 文で記載することができます。

if ($childObject instanceof ParentAClass && $childObject instanceof ParentBClass)

ちょっと視認性が悪いですね。

私がこのコードの改修をしてほしいと頼まれたら気合いを入れ直すと思います。

変数名、型演算子を2回つかっていますが、条件が増えれば増えるほど、その視認性が低下していき、

よりわかりにくいコードになっていくと考えられます。

メリット②保守性があがる

メリット①にもつながる話ではありますが、関数に指定できるようになり、保守性があがります。

関数の場合、引数として値を渡す時点で気付けるようになることから、コードの誤りに気づけるタイミングが早まります。

また、個人開発では特に気にしませんが、ほとんどのサービスはチームで開発されています。

チームで開発している以上、コードに対するメンバー各々の認識にはどうしても差ができてしまいます。

それを埋めるにはある程度のルールを決める必要がありますし、交差型は「型を強制させる」というルールを追加することができるというメリットがあると私は考えています。

まとめ

  • 型を&でつなぐと交差型を指定可能
  • 交差型は指定されたクラスを継承したクラスのオブジェクトのみ受け付ける
  • 保守性があがるので、使える場面では使いたい

今後もPHPの学習を進め、紹介したい追加要素があれば記事にします。

ご覧いただきありがとうございました。