や PHP-DI など コンストラクタへ依存クラスを並べ ていくだけ 自分で new するのは VO とかテスト とかごく一部に Laravel でも Facade より DI // DI コンテナが勝手に依存先を生成 public function __construct( public readonly Dependency1 $obj1 public readonly Dependency2 $obj2 ) { }
や @pure などがある なるべく完全コンストラクタ+不変 状態を持たない = 各生成時点で全情 報が必要 小さなクラスが増え神クラス化 も防ぎやすくなる class ReadOnlyClass { public function __construct( public readonly int $id, public readonly string $name, ) { } } /** @psalm-immutable */ class ImmutableClass { public function __construct( public int $id, public string $name, ) { } }
実クラスを定義しなくとも型 タグを使える ちかぢか同僚が会社のブロ グで紹介するかも trait ItemId { public function __construct( public readonly int $value, ) { } } class ConsumableItemId {use ItemId;} class EquipmentItemId {use ItemId;} class Consumableuser { public function useItem( ConsumableItemId $item_id ): void { } }