3v4l.org

run code in 300+ PHP versions simultaneously
<?php function objectType($name, ...$fields) { if (empty($fields)) { throw new \RuntimeException(); } if (!is_string(key($fields[0]))) { $interfaces = array_shift($fields); } else { $interfaces = []; } if (empty($fields)) { throw new \RuntimeException(); } $def = [ 'name' => $name, 'interfaces' => $interfaces, 'fields' => [], ]; foreach ($fields as &$field) { $def['fields'][$field['name']] = $field; } return $def; } function field($name, $type, ...$args) { $def = [ 'name' => $name, 'type' => $type, 'args' => [], 'resolve' => null, ]; if (!empty($args) && is_callable(end($args))) { $def['resolve'] = array_pop($args); } foreach ($args as &$arg) { $def['args'][$arg['name']] = $arg; } return $def; } function argument($name, $type, $value = null) { $def = [ 'name' => $name, 'type' => $type, 'defaultValue' => $value, ]; return $def; } $IntType = ['name' => 'Int']; $StringType = ['name' => 'String']; $BlogType = objectType('Blog', field('id', $IntType), field('name', $StringType)); $UserType = objectType('Blog', field('id', $IntType), field('email', $StringType)); $QueryType = objectType('Query', field('blog', $BlogType, argument('id', $IntType)), field('user', $UserType, argument('id', $IntType))); var_dump($QueryType);
Output for 5.6.8 - 5.6.28, 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
array(3) { ["name"]=> string(5) "Query" ["interfaces"]=> array(0) { } ["fields"]=> array(2) { ["blog"]=> array(4) { ["name"]=> string(4) "blog" ["type"]=> array(3) { ["name"]=> string(4) "Blog" ["interfaces"]=> array(0) { } ["fields"]=> array(2) { ["id"]=> array(4) { ["name"]=> string(2) "id" ["type"]=> array(1) { ["name"]=> string(3) "Int" } ["args"]=> array(0) { } ["resolve"]=> NULL } ["name"]=> array(4) { ["name"]=> string(4) "name" ["type"]=> array(1) { ["name"]=> string(6) "String" } ["args"]=> array(0) { } ["resolve"]=> NULL } } } ["args"]=> array(1) { ["id"]=> array(3) { ["name"]=> string(2) "id" ["type"]=> array(1) { ["name"]=> string(3) "Int" } ["defaultValue"]=> NULL } } ["resolve"]=> NULL } ["user"]=> array(4) { ["name"]=> string(4) "user" ["type"]=> array(3) { ["name"]=> string(4) "Blog" ["interfaces"]=> array(0) { } ["fields"]=> array(2) { ["id"]=> array(4) { ["name"]=> string(2) "id" ["type"]=> array(1) { ["name"]=> string(3) "Int" } ["args"]=> array(0) { } ["resolve"]=> NULL } ["email"]=> array(4) { ["name"]=> string(5) "email" ["type"]=> array(1) { ["name"]=> string(6) "String" } ["args"]=> array(0) { } ["resolve"]=> NULL } } } ["args"]=> array(1) { ["id"]=> array(3) { ["name"]=> string(2) "id" ["type"]=> array(1) { ["name"]=> string(3) "Int" } ["defaultValue"]=> NULL } } ["resolve"]=> NULL } } }
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 array(3) { ["name"]=> string(5) "Query" ["interfaces"]=> array(0) { } ["fields"]=> array(2) { ["blog"]=> array(4) { ["name"]=> string(4) "blog" ["type"]=> array(3) { ["name"]=> string(4) "Blog" ["interfaces"]=> array(0) { } ["fields"]=> array(2) { ["id"]=> array(4) { ["name"]=> string(2) "id" ["type"]=> array(1) { ["name"]=> string(3) "Int" } ["args"]=> array(0) { } ["resolve"]=> NULL } ["name"]=> array(4) { ["name"]=> string(4) "name" ["type"]=> array(1) { ["name"]=> string(6) "String" } ["args"]=> array(0) { } ["resolve"]=> NULL } } } ["args"]=> array(1) { ["id"]=> array(3) { ["name"]=> string(2) "id" ["type"]=> array(1) { ["name"]=> string(3) "Int" } ["defaultValue"]=> NULL } } ["resolve"]=> NULL } ["user"]=> array(4) { ["name"]=> string(4) "user" ["type"]=> array(3) { ["name"]=> string(4) "Blog" ["interfaces"]=> array(0) { } ["fields"]=> array(2) { ["id"]=> array(4) { ["name"]=> string(2) "id" ["type"]=> array(1) { ["name"]=> string(3) "Int" } ["args"]=> array(0) { } ["resolve"]=> NULL } ["email"]=> array(4) { ["name"]=> string(5) "email" ["type"]=> array(1) { ["name"]=> string(6) "String" } ["args"]=> array(0) { } ["resolve"]=> NULL } } } ["args"]=> array(1) { ["id"]=> array(3) { ["name"]=> string(2) "id" ["type"]=> array(1) { ["name"]=> string(3) "Int" } ["defaultValue"]=> NULL } } ["resolve"]=> NULL } } }
Output for 5.5.24 - 5.5.35
Parse error: syntax error, unexpected '.', expecting '&' or variable (T_VARIABLE) in /in/J3U6s on line 3
Process exited with code 255.

preferences:
178.31 ms | 401 KiB | 183 Q