<?php
class Route
{
private $method, $path, $handler;
public function __construct($method, $path, $handler)
{
$this->method = $method;
$this->path = $path;
$this->handler = $handler;
}
public function prepend($path)
{
$this->path = $path . $this->path;
return $this;
}
}
function route($method, $path, $handler)
{
return new Route($method, $path, $handler);
}
function group($path, $function)
{
foreach ($function() as $route) {
yield $route->prepend($path);
}
}
function get_routes()
{
$handler = 'doSomething';
yield route('GET', '/', $handler);
yield route('GET', '/foo', $handler);
yield from group('/bar', function () {
yield route('GET', '/hello ', $handler);
yield route('GET', '/world', $handler);
});
}
foreach (get_routes() as $route) {
var_dump($route);
}
- Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
- object(Route)#3 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(1) "/"
["handler":"Route":private]=>
string(11) "doSomething"
}
object(Route)#4 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(4) "/foo"
["handler":"Route":private]=>
string(11) "doSomething"
}
Warning: Undefined variable $handler in /in/FONBK on line 41
object(Route)#8 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(11) "/bar/hello "
["handler":"Route":private]=>
NULL
}
Warning: Undefined variable $handler in /in/FONBK on line 42
object(Route)#9 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(10) "/bar/world"
["handler":"Route":private]=>
NULL
}
- Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.31, 7.4.0 - 7.4.33
- object(Route)#3 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(1) "/"
["handler":"Route":private]=>
string(11) "doSomething"
}
object(Route)#4 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(4) "/foo"
["handler":"Route":private]=>
string(11) "doSomething"
}
Notice: Undefined variable: handler in /in/FONBK on line 41
object(Route)#8 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(11) "/bar/hello "
["handler":"Route":private]=>
NULL
}
Notice: Undefined variable: handler in /in/FONBK on line 42
object(Route)#9 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(10) "/bar/world"
["handler":"Route":private]=>
NULL
}
- Output for 7.3.32 - 7.3.33
- object(Route)#3 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(1) "/"
["handler":"Route":private]=>
string(11) "doSomething"
}
object(Route)#4 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(4) "/foo"
["handler":"Route":private]=>
string(11) "doSomething"
}
object(Route)#8 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(11) "/bar/hello "
["handler":"Route":private]=>
NULL
}
object(Route)#9 (3) {
["method":"Route":private]=>
string(3) "GET"
["path":"Route":private]=>
string(10) "/bar/world"
["handler":"Route":private]=>
NULL
}
- Output for 5.5.24 - 5.5.35, 5.6.8 - 5.6.28
- Parse error: syntax error, unexpected 'group' (T_STRING) in /in/FONBK on line 40
Process exited with code 255.
preferences:
148.62 ms | 412 KiB | 5 Q