3v4l.org

run code in 300+ PHP versions simultaneously
<?php declare(strict_types=1); final class Custom extends \RuntimeException { public static int $counter = 0; private function __construct(string $reason) { parent::__construct($reason); ++self::$counter; } public static function reason(string $reason): self { return new self($reason); } } printf("%d\n", Custom::$counter); assert(true === true, Custom::reason("Should never fail")); printf("%d (if increased, pointless throwable instantiation)\n", Custom::$counter); try { assert(true === false, Custom::reason("Should always fail")); } catch (\Throwable $t) { printf("%d (if increased, expected throwable instantiation) <%s>\n", Custom::$counter, $t->getMessage()); } printf("%d\n", Custom::$counter);
Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
0 1 (if increased, pointless throwable instantiation) 2 (if increased, expected throwable instantiation) <Should always fail> 2

preferences:
99.87 ms | 402 KiB | 89 Q