Rubellum fly light

ほぼPHP日記

PHP8.2以降のDTOの書き方

<?php

readonly class UploadProfileImageInput
{
    public function __construct(
        public int $userId,
        public string $imagePath,
    ) {
    }
}

採用したこと

  • イミュータブルなオブジェクトならclassにreadonlyをつける
    • setterがある場合はプロパティごとにreadonlyをつける
  • コンストラクタのプロモーションを使う
    • 手間削減のためgetter, setterを定義しない

採用しなかったこと

  • classにfinalキーワードをつける
    • 流石に継承するやつおらんだろ...おらんよね...?

採用するか迷っていること

  • APIレスポンスオブジェクトなどでjson化されるクラスにJsonSerializableを実装するか
    • JSONのフォーマットがクラスによって変わる場合はtoArrayメソッドを用意して、呼び出し元でJSONの構造に変換する必要があるため。