nextId(); $text = new Text( id: $id, name: $dto->name, user: $dto->user, ); $this->existingTexts[$id] = $text; return $text; } public function find(int $id): ?Text { if (!isset($this->existingTexts[$id])) { return null; } $text = $this->existingTexts[$id]; return new Text( id: $text->getId(), name: $text->getName(), user: $text->getUser(), ); } private function nextId(): int { return count($this->existingTexts); } /** * @return Text[] */ public function getAll(): array { return array_map( function (Text $text) { return new Text( id: $text->getId(), name: $text->getName(), user: $text->getUser(), ); }, array_values($this->existingTexts) ); } /** * @return Text[] */ public function findByUser(User $user): array { $userId = $user->getId(); $owned = array_filter( $this->existingTexts, function (Text $text) use ($userId) { return $text->getUser()->getId() === $userId; } ); return array_map( function (Text $text) { return new Text( id: $text->getId(), name: $text->getName(), user: $text->getUser(), ); }, array_values($owned) ); } }