お久しぶりです…そろそろ更新頻度上げていきたいと思っております🙇♂️
今回は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のコンストラクタの書き方と似てます 💡