PHPカンファレンス広島2025 プロポーザル
言いたいこと
PHP 8.4.0 からインターフェースプロパティを宣言できるようになったよ
インターフェースのプロパティを使うことでより、ドメインモデルを実装したときにfinalをつけられるよ
finalを使うことでよりクラスの設計の明確化がされる
APIの安定性を保証できる
ライブラリやフレームワークで特に重要
コードの意図がより明確になり、メンテナンスしやすくなる
こんな使い方があるよ
PHP 8.4.0 のプロパティフックを使えばEloquent(ORM)からの脱却ができるのでは
その処理で実体を意識しなくてもよくなるかもよ
さらに、Entity(ORMとは別のモデル)が不要になるのでは
なぜ
無駄な処理が省けるよ
getter / setter
ビジネスロジックが実体に依存することをさらに避けることができる
処理がORMに依存することによってテストが書きづらくなる -> テストが書きやすくなるんじゃない?
ドメインモデル(実体)を実装することで解消可能 -> インターフェースである必要はない
ORMの実体の変更に処理の内容が左右される -> ORMのモデルを意識しなくても良くなるじゃない?
ドメインモデル(実体)を実装することで解消可能 -> インターフェースである必要はない
同じようなデータ構造を複数定義するのがめんどくさい - > 同じようなデータ構造(例: Eloquentモデルとドメインモデル)を定義しなくてもよくなるんじゃない?
(途中)
登壇のための仮説検証
interfaceでプロパティフックを定義できる -> できる
interfaceを引数にして実体を代入したときにどうなるか -> そのまま使える
interface上で set を書かなかった場合にsetをしたときの挙動 -> セットできる
エディタ上の警告はされるが、実行時には何も起きない
Eloquentに継承することで値を引き出すことができるのか
クエリビルダを返す処理にはどのように対処するのか
タイトル(仮): ついにきた!PHP 8.4でインターフェースにプロパティが書けるようになったぞ!!!!
内容:
PHP 8.4.0から、インターフェースプロパティを宣言できるようになりました。
PHP 8.4.0 から、インターフェイスはプロパティを宣言できるようになりました。 宣言する場合、そのプロパティの読み取り可否、書き込み可否、あるいは双方を 指定する必要があります。 インターフェイスによる宣言は、public な読み書きに対してのみ適用できます。
自分はこれをみたときに、「やっときたか!!!!」と大興奮しました。
とはいえ、プロパティフックについては多くの人が注目しており、今更感がありますが。
改めて、皆さんとインターフェースにプロパティを定義できる喜びをシェアしたいなと思っています。
そこで、以下についてお話させていただきたいです
使い方
使うことでどのような嬉しいことがあるのか