3v4l.org

run code in 300+ PHP versions simultaneously
<?php class User { public readonly int $id; public readonly string $email; public function __construct(int $id, string $email) { $this->id = $id; $this->email = $email; } } interface IUserStorage { public function addUser(User $user): void; public function findById(int $userId): ?User; public function findFirstByEmail(string $email): ?User; } class RuntimeUserStorage implements IUserStorage { private array $users; public function __construct(array $users = []) { $this->users = $users; } public function addUser(User $user): void { $this->users[$user->id] = $user; } public function findById(int $userId): ?User { return $this->users[$userId] ?? null; } public function findFirstByEmail(string $email): ?User { $usersWithEmail = array_filter($this->users, static fn(User $user) => $user->email === $email); return array_shift($usersWithEmail); } } interface IFindEmail { public function __invoke(string $email): ?string; } class FindEmailFromUsers implements IFindEmail { private IUserStorage $users; public function __construct(IUserStorage $users) { $this->users = $users; } public function __invoke(string $email): ?string { return $this->users->findFirstByEmail($email)?->email; } } class IsEmailValid { private IFindEmail $findEmail; public function __construct(IFindEmail $findEmail) { $this->findEmail = $findEmail; } public function __invoke(string $email): bool { return $this->isEmailUnique($email) && $this->isEmailValid($email) && $this->isEmailTooShort($email); } private function isEmailUnique(string $email): bool { $foundEmail = ($this->findEmail)($email); if(null === $foundEmail) { return true; } return $foundEmail !== $email; } private function isEmailValid(string $email): bool {return true;} private function isEmailTooShort(string $email): bool {return true;} } $user = new User(1, 'vasya@gmail.com'); $emailStorage = new RuntimeUserStorage(); $emailStorage->adduser($user); $isEmailValid = new IsEmailValid(new FindEmailFromUsers($emailStorage)); var_dump($isEmailValid($user->email)); var_dump($isEmailValid('petya@mail.ru'));

preferences:
23.64 ms | 406 KiB | 5 Q