= 'c'; } class User{ public UserType $type; public function __construct(string $type){ // 失敗したらちゃんと例外が上がります $this->type = UserType::from($type); } } $user = new User($_GET['type']); echo $user->type->value;
class UserDto{ public function __construct( public int $id, public string $name, public int $lastLoginAtEpoch, public bool $isLongTimeMissed = false, public bool $isAdmin = false, ){} }
public function __construct( public int $id, public string $name, public int $lastLoginAtEpoch, ){ $this->isLongTimeMissed = $this->lastLoginAtEpoch >= time()-self::DELTA_SEC; } }
public int $point, readonly public string $expire_at, ){ } } 同様に「一発で完成する」ように作る レスポンスは取り出ししかなく、加工できないようにする 加工したいなら、変数をつくればいいじゃない readonlyをつければ、作成された後に修正ができない (が、セーフガード・補助輪・フールプルーフであり必須ではない)
DateTimeImmutable $expireAt; public function __construct( readonly public int $point, readonly public string $expire_at, ){ $this->expireAt = new DateTimeImmutable( $expire_at, new DateTimeZone("Asia/Tokyo") ); } } こういうHyderateする仕組みをいれることもある
= 'GET'; readonly public string $path; public function construct( readonly public int $userId, ){ $this->uri = "http://localhost/point/{$userId}"; } } (上は「良い設計」とは到底いえませんが、短く書きたかったので許せ) リクエストも手続き型的に作らず、中途半端なインスタンスが生まれないように 「使っているHttpClient」の仕様にあわせない方が良い