お久しぶりです…そろそろ更新頻度上げていきたいと思っております🙇♂️
今回はPHP8から使えるようになった、Constructor property promotion
を使って見たので、差分と使って見た感想をまとめてみます。
Constructor property promotion
とは?
https://www.php.net/releases/8.0/en.php#constructor-property-promotion
👆のPHP7→PHP8の差分を見ての通り、簡潔に言うとコンストラクタの引数にすべてを詰め込めます。コンストラクタの引数にプロパティ定義、初期値もかけちゃいます。
実際にDj-Kin29で適用した差分
詳細: https://github.com/kin29/dj-kin29/pull/34/files
before
class DefaultController extends AbstractController { private AuthHandler $authHandler; private GetTopTrackService $getTopTrackService; private CreatePlaylistService $createPlaylistService; public function __construct( AuthHandler $authHandler, GetTopTrackService $getTopTrackService, CreatePlaylistService $createPlaylistService ) { $this->authHandler = $authHandler; $this->getTopTrackService = $getTopTrackService; $this->createPlaylistService = $createPlaylistService; }
after
class DefaultController extends AbstractController { public function __construct( private AuthHandler $authHandler, private GetTopTrackService $getTopTrackService, private CreatePlaylistService $createPlaylistService ) { }
このコード見てて気づきましたが、AbstractControllerをextendsするのやめたいなーと思いました。
使って見た感想
👆のコードを見ての通り、6行もコードが減りました!!!スッキリさせたい私的には大変いい感じです。
慣れるまでは違和感がありましたが、実際に使ってみるとなんだかんだすぐ慣れそうな気がしました。
TypeScriptのコンストラクタの書き方と似てます 💡