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'));

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.4.120.0100.01120.48
8.4.110.0110.00917.67
8.4.100.0110.01117.96
8.4.90.0100.01120.37
8.4.80.0060.00620.59
8.4.70.0050.00322.40
8.4.60.0140.00620.50
8.4.50.0090.01318.61
8.4.40.0030.01618.59
8.4.30.0130.00620.78
8.4.20.0140.00717.84
8.4.10.0100.01019.70
8.3.250.0120.00816.51
8.3.240.0100.01016.72
8.3.230.0130.00716.61
8.3.220.0130.00518.97
8.3.210.0110.00618.43
8.3.200.0100.00616.66
8.3.190.0060.00317.24
8.3.180.0110.00718.97
8.3.170.0080.00717.18
8.3.160.0150.00318.40
8.3.150.0120.00617.10
8.3.140.0070.00316.94
8.3.130.0060.00318.61
8.3.120.0050.00919.06
8.3.110.0060.00322.58
8.3.100.0090.00022.58
8.3.90.0040.01122.58
8.3.50.0080.00022.58
8.2.290.0100.01018.57
8.2.280.0100.00918.24
8.2.270.0030.01717.14
8.2.260.0110.00716.28
8.2.250.0130.00618.32
8.2.240.0030.00718.96
8.2.230.0000.00822.58
8.2.220.0000.00922.58
8.2.210.0040.00422.58
8.2.110.0130.00620.53
8.2.100.0140.00719.45
8.2.90.0200.01418.91
8.2.80.0190.00418.91
8.2.70.0330.01018.52
8.2.60.0180.00918.58
8.2.50.0150.00618.68
8.2.40.0080.00818.95
8.2.30.0140.00018.65
8.2.20.0080.00618.70
8.2.10.0120.00218.97
8.2.00.0120.00319.20
8.1.330.0130.00618.54
8.1.320.0110.00816.20
8.1.310.0030.00516.39
8.1.300.0060.01218.45
8.1.240.0130.00018.48
8.1.230.0150.00018.65
8.1.220.0110.00318.52
8.1.210.0100.00319.88
8.1.200.0050.01018.62
8.1.190.0100.00018.55
8.1.180.0090.00618.30
8.1.170.0130.00018.64
8.1.160.0090.00318.73
8.1.150.0120.00020.43
8.1.140.0090.00618.49
8.1.130.0110.00318.70
8.1.120.0130.00018.63
8.1.110.0090.00418.45
8.1.100.0150.00018.42
8.1.90.0110.00318.55
8.1.80.0150.00018.36
8.1.70.0060.00618.58
8.1.60.0130.00318.53
8.1.50.0160.00018.58
8.1.40.0120.00018.76
8.1.30.0090.00319.00
8.1.20.0160.00018.73
8.1.10.0060.00618.74
8.1.00.0120.00018.53
8.0.300.0100.00317.76
8.0.290.0120.00317.80
8.0.280.0100.00317.76
8.0.270.0100.00317.96
8.0.260.0100.00317.80
8.0.250.0140.00017.82
8.0.240.0070.00717.88
8.0.230.0060.00618.40
8.0.220.0080.00617.82
8.0.210.0070.00717.96
8.0.200.0110.00417.77
8.0.190.0110.00417.89
8.0.180.0000.01317.95
8.0.170.0080.00417.96
8.0.160.0090.00517.83
8.0.150.0070.00717.88
8.0.140.0110.00317.83
8.0.130.0100.00318.15
8.0.120.0120.00217.78
8.0.110.0150.00317.75
8.0.100.0160.00017.53
8.0.90.0220.00317.77
8.0.80.0150.00017.76
8.0.70.0130.00017.79
8.0.60.0140.00017.60
8.0.50.0190.00617.83
8.0.30.0100.00317.84
8.0.20.0160.00917.97
8.0.10.0140.01117.94

preferences:
30.65 ms | 403 KiB | 5 Q