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

preferences:
45.69 ms | 402 KiB | 5 Q