3v4l.org

run code in 300+ PHP versions simultaneously
<?php foreach ([ 'boolean' => 'true', 'double' => '1.2', 'integer' => '1', 'resource' => 'STDOUT', ] as $type => $value) { $functionName = "foo_{$type}"; $code = <<<EOT function {$functionName}({$type} \$i) { } {$functionName}({$value}); EOT; echo "Testing {$type} with\n", str_replace($functionName, 'foo', $code), "\nresults in:\n "; try { eval($code); echo "success.\n"; } catch (TypeError $e) { $message = str_replace($functionName, 'foo', $e->getMessage()); $message = substr($message, 0, strpos($message, ', called in ')); echo $message, "\n"; } echo "\n"; }
Output for git.master, git.master_jit
Testing boolean with function foo(boolean $i) { } foo(true); results in: Warning: "boolean" will be interpreted as a class name. Did you mean "bool"? Write "\boolean" to suppress this warning in /in/816pM(18) : eval()'d code on line 1 foo(): Argument #1 ($i) must be of type boolean, bool given Testing double with function foo(double $i) { } foo(1.2); results in: Warning: "double" will be interpreted as a class name. Did you mean "float"? Write "\double" to suppress this warning in /in/816pM(18) : eval()'d code on line 1 foo(): Argument #1 ($i) must be of type double, float given Testing integer with function foo(integer $i) { } foo(1); results in: Warning: "integer" will be interpreted as a class name. Did you mean "int"? Write "\integer" to suppress this warning in /in/816pM(18) : eval()'d code on line 1 foo(): Argument #1 ($i) must be of type integer, int given Testing resource with function foo(resource $i) { } foo(STDOUT); results in: Warning: "resource" is not a supported builtin type and will be interpreted as a class name. Write "\resource" to suppress this warning in /in/816pM(18) : eval()'d code on line 1 foo(): Argument #1 ($i) must be of type resource, resource given
Output for rfc.property-hooks
Testing boolean with function foo(boolean $i) { } foo(true); results in: Warning: "boolean" will be interpreted as a class name. Did you mean "bool"? Write "\boolean" to suppress this warning in /in/816pM(18) : eval()'d code on line 1 foo(): Argument #1 ($i) must be of type boolean, true given Testing double with function foo(double $i) { } foo(1.2); results in: Warning: "double" will be interpreted as a class name. Did you mean "float"? Write "\double" to suppress this warning in /in/816pM(18) : eval()'d code on line 1 foo(): Argument #1 ($i) must be of type double, float given Testing integer with function foo(integer $i) { } foo(1); results in: Warning: "integer" will be interpreted as a class name. Did you mean "int"? Write "\integer" to suppress this warning in /in/816pM(18) : eval()'d code on line 1 foo(): Argument #1 ($i) must be of type integer, int given Testing resource with function foo(resource $i) { } foo(STDOUT); results in: Warning: "resource" is not a supported builtin type and will be interpreted as a class name. Write "\resource" to suppress this warning in /in/816pM(18) : eval()'d code on line 1 foo(): Argument #1 ($i) must be of type resource, 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:
48.82 ms | 412 KiB | 5 Q