3v4l.org

run code in 300+ PHP versions simultaneously
<?php function autoboxing_error_handler($errno, $errstr, $errfile, $errline, $errcontext) { if (preg_match('/^Argument (\d+) passed to \S+ must be (?:an|an instance of|of the type) (\S+), \S+ given/', $errstr, $match)) { $bt = debug_backtrace(); $value = $bt[1]["args"][$match[1] - 1]; if (strcasecmp($match[2], "array") == 0) { $bt[1]["args"][$match[1] - 1] = array($value); return true; } else if (is_subclass_of($match[2], "Autoboxable")) { $bt[1]["args"][$match[1] - 1] = new $match[2]($value); return true; } } return false; } set_error_handler("autoboxing_error_handler"); interface Autoboxable { public function __construct($value); } class Integer implements Autoboxable { public $value = null; public function __construct($value) { $this->value = (int)$value; } } function foo(Integer $a, array $b) { var_dump($a->value); var_dump($b); } foo("1", 2);
Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.30, 8.2.0 - 8.2.25, 8.3.0 - 8.3.13
Fatal error: Uncaught TypeError: foo(): Argument #1 ($a) must be of type Integer, string given, called in /in/5lbf0 on line 41 and defined in /in/5lbf0:36 Stack trace: #0 /in/5lbf0(41): foo('1', 2) #1 {main} thrown in /in/5lbf0 on line 36
Process exited with code 255.
Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33
Fatal error: Uncaught TypeError: Argument 1 passed to foo() must be an instance of Integer, string given, called in /in/5lbf0 on line 41 and defined in /in/5lbf0:36 Stack trace: #0 /in/5lbf0(41): foo('1', 2) #1 {main} thrown in /in/5lbf0 on line 36
Process exited with code 255.
Output for 5.3.7 - 5.3.29, 5.4.0 - 5.4.45, 5.5.24 - 5.5.35, 5.6.8 - 5.6.28
int(1) array(1) { [0]=> int(2) }
Output for 5.2.0 - 5.2.17, 5.3.0 - 5.3.6
Catchable fatal error: Argument 1 passed to foo() must be an instance of Integer, string given, called in /in/5lbf0 on line 41 and defined in /in/5lbf0 on line 36
Process exited with code 255.
Output for 5.1.0 - 5.1.6
Fatal error: Argument 1 passed to foo() must be an object of class Integer, called in /in/5lbf0 on line 41 and defined in /in/5lbf0 on line 36
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Parse error: parse error, unexpected T_ARRAY, expecting '&' or T_VARIABLE in /in/5lbf0 on line 36
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING in /in/5lbf0 on line 20
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
Parse error: parse error, unexpected T_STRING in /in/5lbf0 on line 20
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error in /in/5lbf0 on line 20
Process exited with code 255.

preferences:
87.54 ms | 417 KiB | 5 Q