3v4l.org

run code in 300+ PHP versions simultaneously
<?php final class Sleep { public static function for(Time $duration): void { usleep($duration->microseconds); } } readonly final class Time { public function __construct(public int $microseconds) { } public function add(self $time): self { return self::microseconds($this->microseconds + $time->microseconds); } public static function microseconds(int $duration): self { return new self($duration); } public static function milliseconds(int $duration): self { return new self($duration * 1000); } } function check(bool $a) { $sleep = Time::milliseconds(100); if ($a) { $sleep->add(Time::milliseconds(200)); } Sleep::for($sleep); echo 'CHECK:' . (new DateTime())->format(DateTimeInterface::ATOM); echo PHP_EOL; } echo 'OUTER_TIME: ' . (new DateTime())->format(DateTimeInterface::ATOM); echo PHP_EOL; check(false); echo 'OUTER_TIME: ' . (new DateTime())->format(DateTimeInterface::ATOM); echo PHP_EOL; check(true); echo 'OUTER_TIME: ' . (new DateTime())->format(DateTimeInterface::ATOM); echo PHP_EOL; // expected output: //OUTER_TIME: 2023-12-12T20:26:28+01:00 //Sleeping for 100 μseconds //CHECK:2023-12-12T20:26:28+01:00 // //OUTER_TIME: 2023-12-12T20:26:28+01:00 //Sleeping for 200 μseconds //CHECK:2023-12-12T20:26:28+01:00 // //OUTER_TIME: 2023-12-12T20:26:28+01:00
Output for 8.2.6 - 8.2.29, 8.3.5 - 8.3.25, 8.4.1 - 8.4.12
OUTER_TIME: 2023-12-12T20:41:07+01:00 CHECK:2023-12-12T20:41:07+01:00 OUTER_TIME: 2023-12-12T20:41:07+01:00 CHECK:2023-12-12T20:41:07+01:00 OUTER_TIME: 2023-12-12T20:41:07+01:00
Output for 8.1.30 - 8.1.33
Parse error: syntax error, unexpected token "readonly", expecting end of file in /in/WhAXp on line 11
Process exited with code 255.

preferences:
53.26 ms | 407 KiB | 5 Q