Skip to content

Instantly share code, notes, and snippets.

@jm42
Created August 7, 2016 02:43
Show Gist options
  • Save jm42/b4a2a6a9daa23d042edf6d3eb25ea27b to your computer and use it in GitHub Desktop.
Save jm42/b4a2a6a9daa23d042edf6d3eb25ea27b to your computer and use it in GitHub Desktop.
Router idea
<?php
class R {
protected $matchers = [];
function __invoke(...$matchers) {
$uniq = uniqid();
$this->matchers[$uniq] = $matchers;
return $uniq;
}
function match($req) {
$resolver = function($args, $matcher) use($req) {
if (($match = $matcher($req)) !== false) {
return ($args ?: []) + (is_array($match) ? $match : []);
}
return false;
};
foreach ($this->matchers as $name => $matchers) {
if (($match = array_reduce($matchers, $resolver, false)) !== false) {
return [$name, $match];
}
}
return false;
}
}
function m($m) {
return function($req) use($m) {
return $req['method'] === $m;
};
}
$r = new R;
$m = [$r(m('GET')) => function($a) { return "Hello"; }];
list($n, $a) = $r->match(['method' => 'GET', 'path' => '/']);
var_dump($m[$n]($a));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment