3v4l.org

run code in 500+ PHP versions simultaneously
<?php enum FormatOutput: string { case Text = '666777'; case Html = 'html'; } const SOMECONST = 'Const hello'; function SomeFunction() { } $SomeFunctionClosure = function() { }; $SomeFunctionFirstClassCallable = SomeFunction(...); $someFunctionClosureFromCallabe = Closure::fromCallable('SomeFunction'); $arrowFunction = fn($a) => $a; $testcases = [ 666777, '666777', FormatOutput::Text, // For testing purposes: let's see what every type does... SOMECONST, 'abc', -6, 7, -6.7, null, true, false, ['a', 'b', 'c'], [6 => 'six', 7 => 'seven', 67 => 'six seven'], ['a' => 'a', 'b' => 'b', 'c' => 'c', 0 => 'Zero'], function() {}, $SomeFunctionClosure, $SomeFunctionFirstClassCallable, $someFunctionClosureFromCallabe, $arrowFunction, new DateTimeImmutable(), fopen('php://memory', 'w+'), ]; foreach($testcases as $testcase) { echo '--------------[ TESTCASE ]--------------'."\n"; var_dump($testcase); echo "\n"; echo '--- tryFrom()'."\n"; try { $value = FormatOutput::tryFrom($testcase); if ($value !== null) { echo 'Value is '.$value->name.' with value '.$value->value.'.'."\n"; } else { echo 'Value is NULL.'."\n"; } } catch (Throwable $exception) { echo $exception::class, ': ', $exception->getMessage(), "\n"; } echo '--- from()'."\n"; try { $value = FormatOutput::from($testcase); if ($value !== null) { echo 'Value is '.$value->name.' with value '.$value->value.'.'."\n"; } else { echo 'Value is NULL.'."\n"; } } catch (Throwable $exception) { echo $exception::class, ': ', $exception->getMessage(), "\n"; } echo "\n"; echo "\n"; echo "\n"; }
Output for git.master_jit
--------------[ TESTCASE ]-------------- int(666777) --- tryFrom() Value is Text with value 666777. --- from() Value is Text with value 666777. --------------[ TESTCASE ]-------------- string(6) "666777" --- tryFrom() Value is Text with value 666777. --- from() Value is Text with value 666777. --------------[ TESTCASE ]-------------- enum(FormatOutput::Text) --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, FormatOutput given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, FormatOutput given --------------[ TESTCASE ]-------------- string(11) "Const hello" --- tryFrom() Value is NULL. --- from() ValueError: "Const hello" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- string(3) "abc" --- tryFrom() Value is NULL. --- from() ValueError: "abc" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- int(-6) --- tryFrom() Value is NULL. --- from() ValueError: "-6" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- int(7) --- tryFrom() Value is NULL. --- from() ValueError: "7" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- float(-6.7) --- tryFrom() Deprecated: Implicit conversion from float -6.7 to int loses precision in /in/DLGgU on line 60 Value is NULL. --- from() Deprecated: Implicit conversion from float -6.7 to int loses precision in /in/DLGgU on line 72 ValueError: "-6" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- NULL --- tryFrom() Deprecated: FormatOutput::tryFrom(): Passing null to parameter #1 ($value) of type string|int is deprecated in /in/DLGgU on line 60 Value is NULL. --- from() Deprecated: FormatOutput::from(): Passing null to parameter #1 ($value) of type string|int is deprecated in /in/DLGgU on line 72 ValueError: "0" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- bool(true) --- tryFrom() Value is NULL. --- from() ValueError: "1" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- bool(false) --- tryFrom() Value is NULL. --- from() ValueError: "0" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, array given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, array given --------------[ TESTCASE ]-------------- array(3) { [6]=> string(3) "six" [7]=> string(5) "seven" [67]=> string(9) "six seven" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, array given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, array given --------------[ TESTCASE ]-------------- array(4) { ["a"]=> string(1) "a" ["b"]=> string(1) "b" ["c"]=> string(1) "c" [0]=> string(4) "Zero" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, array given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, array given --------------[ TESTCASE ]-------------- object(Closure)#7 (3) { ["name"]=> string(22) "{closure:/in/DLGgU:43}" ["file"]=> string(9) "/in/DLGgU" ["line"]=> int(43) } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(Closure)#1 (3) { ["name"]=> string(22) "{closure:/in/DLGgU:15}" ["file"]=> string(9) "/in/DLGgU" ["line"]=> int(15) } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(Closure)#2 (1) { ["function"]=> string(12) "SomeFunction" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(Closure)#3 (1) { ["function"]=> string(12) "SomeFunction" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(Closure)#4 (4) { ["name"]=> string(22) "{closure:/in/DLGgU:22}" ["file"]=> string(9) "/in/DLGgU" ["line"]=> int(22) ["parameter"]=> array(1) { ["$a"]=> string(10) "<required>" } } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(DateTimeImmutable)#8 (3) { ["date"]=> string(26) "2026-08-20 13:05:20.032118" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Amsterdam" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, DateTimeImmutable given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, DateTimeImmutable given --------------[ TESTCASE ]-------------- resource(5) of type (stream) --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, resource given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, resource given
Output for git.master
--------------[ TESTCASE ]-------------- int(666777) --- tryFrom() Value is Text with value 666777. --- from() Value is Text with value 666777. --------------[ TESTCASE ]-------------- string(6) "666777" --- tryFrom() Value is Text with value 666777. --- from() Value is Text with value 666777. --------------[ TESTCASE ]-------------- enum(FormatOutput::Text) --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, FormatOutput given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, FormatOutput given --------------[ TESTCASE ]-------------- string(11) "Const hello" --- tryFrom() Value is NULL. --- from() ValueError: "Const hello" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- string(3) "abc" --- tryFrom() Value is NULL. --- from() ValueError: "abc" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- int(-6) --- tryFrom() Value is NULL. --- from() ValueError: "-6" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- int(7) --- tryFrom() Value is NULL. --- from() ValueError: "7" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- float(-6.7) --- tryFrom() Deprecated: Implicit conversion from float -6.7 to int loses precision in /in/DLGgU on line 60 Value is NULL. --- from() Deprecated: Implicit conversion from float -6.7 to int loses precision in /in/DLGgU on line 72 ValueError: "-6" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- NULL --- tryFrom() Deprecated: FormatOutput::tryFrom(): Passing null to parameter #1 ($value) of type string|int is deprecated in /in/DLGgU on line 60 Value is NULL. --- from() Deprecated: FormatOutput::from(): Passing null to parameter #1 ($value) of type string|int is deprecated in /in/DLGgU on line 72 ValueError: "0" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- bool(true) --- tryFrom() Value is NULL. --- from() ValueError: "1" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- bool(false) --- tryFrom() Value is NULL. --- from() ValueError: "0" is not a valid backing value for enum FormatOutput --------------[ TESTCASE ]-------------- array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, array given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, array given --------------[ TESTCASE ]-------------- array(3) { [6]=> string(3) "six" [7]=> string(5) "seven" [67]=> string(9) "six seven" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, array given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, array given --------------[ TESTCASE ]-------------- array(4) { ["a"]=> string(1) "a" ["b"]=> string(1) "b" ["c"]=> string(1) "c" [0]=> string(4) "Zero" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, array given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, array given --------------[ TESTCASE ]-------------- object(Closure)#7 (3) { ["name"]=> string(22) "{closure:/in/DLGgU:43}" ["file"]=> string(9) "/in/DLGgU" ["line"]=> int(43) } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(Closure)#1 (3) { ["name"]=> string(22) "{closure:/in/DLGgU:15}" ["file"]=> string(9) "/in/DLGgU" ["line"]=> int(15) } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(Closure)#2 (1) { ["function"]=> string(12) "SomeFunction" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(Closure)#3 (1) { ["function"]=> string(12) "SomeFunction" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(Closure)#4 (4) { ["name"]=> string(22) "{closure:/in/DLGgU:22}" ["file"]=> string(9) "/in/DLGgU" ["line"]=> int(22) ["parameter"]=> array(1) { ["$a"]=> string(10) "<required>" } } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, Closure given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, Closure given --------------[ TESTCASE ]-------------- object(DateTimeImmutable)#8 (3) { ["date"]=> string(26) "2026-08-20 13:05:20.010106" ["timezone_type"]=> int(3) ["timezone"]=> string(16) "Europe/Amsterdam" } --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, DateTimeImmutable given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, DateTimeImmutable given --------------[ TESTCASE ]-------------- resource(5) of type (stream) --- tryFrom() TypeError: FormatOutput::tryFrom(): Argument #1 ($value) must be of type string|int, resource given --- from() TypeError: FormatOutput::from(): Argument #1 ($value) must be of type string|int, resource given

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
50.58 ms | 1382 KiB | 4 Q