3v4l.org

run code in 200+ 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 7.3.0 - 7.4.0
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.2.25
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.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.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.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.