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, function () {}), 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.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 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.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"]=> object(Closure)#1 (0) { } } ["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.0 - 5.5.38
Parse error: syntax error, unexpected '.', expecting '&' or variable (T_VARIABLE) in /in/QAr6Q on line 3
Process exited with code 255.

preferences:
273.11 ms | 401 KiB | 330 Q