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 8.3.0 - 8.3.15, 8.4.1 - 8.4.2
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
Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.31, 8.2.0 - 8.2.27
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 7.3.0 - 7.3.33, 7.4.0 - 7.4.33
Testing boolean with function foo(boolean $i) { } foo(true); results in: Argument 1 passed to foo() must be an instance of boolean, bool given Testing double with function foo(double $i) { } foo(1.2); results in: Argument 1 passed to foo() must be an instance of double, float given Testing integer with function foo(integer $i) { } foo(1); results in: Argument 1 passed to foo() must be an instance of integer, int given Testing resource with function foo(resource $i) { } foo(STDOUT); results in: Argument 1 passed to foo() must be an instance of resource, resource given
Output for 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.34
Testing boolean with function foo(boolean $i) { } foo(true); results in: Argument 1 passed to foo() must be an instance of boolean, boolean given Testing double with function foo(double $i) { } foo(1.2); results in: Argument 1 passed to foo() must be an instance of double, float given Testing integer with function foo(integer $i) { } foo(1); results in: Argument 1 passed to foo() must be an instance of integer, integer given Testing resource with function foo(resource $i) { } foo(STDOUT); results in: Argument 1 passed to foo() must be an instance of resource, resource given
Output for 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40
Testing boolean with function foo(boolean $i) { } foo(true); results in: Catchable fatal error: Argument 1 passed to foo_boolean() must be an instance of boolean, boolean given, called in /in/816pM(18) : eval()'d code on line 4 and defined in /in/816pM(18) : eval()'d code on line 1
Process exited with code 255.
Output for 4.4.2 - 4.4.9, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29
Parse error: syntax error, unexpected '[' in /in/816pM on line 3
Process exited with code 255.
Output for 4.3.0 - 4.3.1, 4.3.5 - 4.3.11, 4.4.0 - 4.4.1, 5.0.0 - 5.0.5
Parse error: parse error, unexpected '[' in /in/816pM on line 3
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error in /in/816pM on line 3
Process exited with code 255.

preferences:
73 ms | 419 KiB | 5 Q