nextId(); $plan = new Plan( id: $id, name: $dto->name, user: $dto->user, ); $this->existingPlans[$id] = $plan; return $plan; } private function nextId(): int { return count($this->existingPlans); } public function find(int $id): ?Plan { return array_find( $this->existingPlans, function (Plan $plan) use ($id) { return $plan->getId() === $id; } ); } public function findByUser(User $user): array { $plans = array_filter( $this->existingPlans, function (Plan $plan) use ($user) { return $plan->getUser()->getId() === $user->getId(); } ); return array_map( function (Plan $plan) { return new Plan( id: $plan->getId(), name: $plan->getName(), user: $plan->getUser(), ); }, $plans ); } }